stage2/build/GHC/Parser/Lexer.hs

    {-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
    {-# LANGUAGE CPP,MagicHash #-}
    {-# LINE 43 "compiler/./GHC/Parser/Lexer.x" #-}

    {-# LANGUAGE BangPatterns #-}
    {-# LANGUAGE DeriveDataTypeable #-}
    {-# LANGUAGE LambdaCase #-}
    {-# LANGUAGE MultiWayIf #-}

    {-# OPTIONS_GHC -funbox-strict-fields #-}
    {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-}

    module GHC.Parser.Lexer (
       Token(..), lexer, lexerDbg,
       ParserOpts(..), mkParserOpts,
       PState (..), initParserState, initPragState,
       P(..), ParseResult(..),
       allocateComments, allocatePriorComments, allocateFinalComments,
       MonadP(..),
       getRealSrcLoc, getPState,
       failMsgP, failLocMsgP, srcParseFail,
       getErrorMessages, getMessages,
       popContext, pushModuleContext, setLastToken, setSrcLoc,
       activeContext, nextIsEOF,
       getLexState, popLexState, pushLexState,
       ExtBits(..),
       xtest, xunset, xset,
       lexTokenStream,
       mkParensEpAnn,
       getCommentsFor, getPriorCommentsFor, getFinalCommentsFor,
       getEofPos,
       commentToAnnotation,
       HdkComment(..),
       warnopt,
      ) where

    import GHC.Prelude

    -- base
    import Control.Monad
    import Data.Char
    import Data.List (stripPrefix, isInfixOf, partition)
    import Data.Maybe
    import Data.Word

    import GHC.Data.EnumSet as EnumSet

    -- ghc-boot
    import qualified GHC.LanguageExtensions as LangExt

    -- bytestring
    import Data.ByteString (ByteString)

    -- containers
    import Data.Map (Map)
    import qualified Data.Map as Map

    -- compiler
    import GHC.Data.Bag
    import GHC.Utils.Outputable
    import GHC.Utils.Panic
    import GHC.Data.StringBuffer
    import GHC.Data.FastString
    import GHC.Types.Unique.FM
    import GHC.Data.Maybe
    import GHC.Data.OrdList
    import GHC.Utils.Misc ( readSignificandExponentPair, readHexSignificandExponentPair )

    import GHC.Types.SrcLoc
    import GHC.Types.SourceText
    import GHC.Types.Basic ( InlineSpec(..), RuleMatchInfo(..))
    import GHC.Hs.Doc

    import GHC.Parser.CharClass

    import GHC.Parser.Annotation
    import GHC.Driver.Flags
    import GHC.Parser.Errors

    #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#
      "\x01\x00\x00\x00\x7b\x00\x00\x00\x84\x00\x00\x00\xa0\x00\x00\x00\xbc\x00\x00\x00\xc5\x00\x00\x00\xce\x00\x00\x00\xec\x00\x00\x00\x06\x01\x00\x00\x22\x01\x00\x00\x3f\x01\x00\x00\x7b\x01\x00\x00\xd4\xff\xff\xff\x61\x00\x00\x00\xd7\xff\xff\xff\xa3\xff\xff\xff\xa4\xff\xff\xff\xf8\x01\x00\x00\x72\x02\x00\x00\xec\x02\x00\x00\x92\xff\xff\xff\x93\xff\xff\xff\x66\x03\x00\x00\x94\xff\xff\xff\xb1\xff\xff\xff\xe6\xff\xff\xff\xe7\xff\xff\xff\xe8\xff\xff\xff\xd1\x00\x00\x00\xad\xff\xff\xff\xaa\xff\xff\xff\xaf\xff\xff\xff\x59\x01\x00\x00\xdc\x03\x00\x00\xfc\x01\x00\x00\xe6\x03\x00\x00\xb2\xff\xff\xff\xb9\xff\xff\xff\xa9\xff\xff\xff\x3d\x01\x00\x00\x7a\x01\x00\x00\x50\x02\x00\x00\xca\x02\x00\x00\x1f\x04\x00\x00\xfa\x03\x00\x00\x59\x04\x00\x00\x95\x01\x00\x00\x05\x02\x00\x00\xae\xff\xff\xff\xb0\xff\xff\xff\xa4\x04\x00\x00\xe5\x04\x00\x00\x63\x02\x00\x00\x44\x03\x00\x00\xdd\x02\x00\x00\xfc\x04\x00\x00\x3d\x05\x00\x00\x57\x03\x00\x00\xc5\x04\x00\x00\x1d\x05\x00\x00\x59\x05\x00\x00\x63\x05\x00\x00\x79\x05\x00\x00\x83\x05\x00\x00\x99\x05\x00\x00\xa9\x05\x00\x00\xb3\x05\x00\x00\xbd\x05\x00\x00\xc9\x05\x00\x00\xd3\x05\x00\x00\xed\x05\x00\x00\x04\x06\x00\x00\x63\x00\x00\x00\x51\x00\x00\x00\x26\x06\x00\x00\x4b\x06\x00\x00\x62\x06\x00\x00\xc4\x03\x00\x00\x6c\x00\x00\x00\x84\x06\x00\x00\xbd\x06\x00\x00\x17\x07\x00\x00\x95\x07\x00\x00\x11\x08\x00\x00\x8d\x08\x00\x00\x09\x09\x00\x00\x85\x09\x00\x00\x01\x0a\x00\x00\xb9\x00\x00\x00\x7d\x0a\x00\x00\xfb\x0a\x00\x00\x13\x00\x00\x00\x15\x00\x00\x00\x2d\x01\x00\x00\x5e\x01\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\xfa\x01\x00\x00\xe0\x03\x00\x00\x94\x07\x00\x00\x80\x00\x00\x00\x79\x00\x00\x00\x81\x00\x00\x00\x82\x00\x00\x00\x88\x00\x00\x00\x95\x00\x00\x00\x96\x00\x00\x00\x76\x0b\x00\x00\x9e\x0b\x00\x00\xe1\x0b\x00\x00\x09\x0c\x00\x00\x4c\x0c\x00\x00\x74\x0c\x00\x00\xe7\x04\x00\x00\x10\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x0c\x00\x00\x2e\x0d\x00\x00\xa8\x0d\x00\x00\x22\x0e\x00\x00\x9c\x0e\x00\x00\xa8\x00\x00\x00\xa9\x00\x00\x00\x1a\x0f\x00\x00\x9c\x00\x00\x00\x94\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x10\x00\x00\x00\x00\x00\x00\x8c\x10\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x11\x00\x00\xfa\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\xb0\x12\x00\x00\x2a\x13\x00\x00\xa4\x13\x00\x00\x1e\x14\x00\x00\x98\x14\x00\x00\x12\x15\x00\x00\x8c\x15\x00\x00\x06\x16\x00\x00\x80\x16\x00\x00\xfa\x16\x00\x00\x74\x17\x00\x00\xee\x17\x00\x00\x68\x18\x00\x00\xe2\x18\x00\x00\x5c\x19\x00\x00\xd6\x19\x00\x00\x50\x1a\x00\x00\xca\x1a\x00\x00\x44\x1b\x00\x00\xbe\x1b\x00\x00\x38\x1c\x00\x00\xb2\x1c\x00\x00\x2c\x1d\x00\x00\xa6\x1d\x00\x00\xa1\x00\x00\x00\xb1\x00\x00\x00\xbd\x00\x00\x00\xbe\x00\x00\x00\xbf\x00\x00\x00\xc1\x00\x00\x00\x00\x1e\x00\x00\x28\x1e\x00\x00\x4b\x1e\x00\x00\x73\x1e\x00\x00\xb6\x1e\x00\x00\xdb\x1e\x00\x00\x54\x1f\x00\x00\xb0\x1f\x00\x00\xd3\x1f\x00\x00\xf6\x1f\x00\x00\x58\x0b\x00\x00\x14\x20\x00\x00\xdd\x00\x00\x00\xbb\x06\x00\x00\x5d\x20\x00\x00\x37\x1f\x00\x00\x82\x20\x00\x00\x20\x01\x00\x00\x71\x07\x00\x00\xcb\x20\x00\x00\xef\x20\x00\x00\xf2\x07\x00\x00\x10\x21\x00\x00\x6e\x08\x00\x00\x26\x21\x00\x00\xe4\x08\x00\x00\x67\x21\x00\x00\x60\x09\x00\x00\xc3\x00\x00\x00\xc4\x00\x00\x00\xc7\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#

    alex_table :: AlexAddr
    alex_table = AlexA#
      "\x00\x00\x63\x00\xc3\x00\xbc\x00\x6c\x00\xcf\x00\x5d\x00\x9a\x00\x74\x00\x7a\x00\x5f\x00\x7d\x00\x5d\x00\x5d\x00\x5d\x00\x88\x00\x89\x00\x8b\x00\x5c\x00\x14\x00\x15\x00\x17\x00\x31\x00\x18\x00\x30\x00\x1e\x00\x24\x00\x25\x00\x10\x00\x77\x00\x0f\x00\x76\x00\xff\xff\x5d\x00\xcf\x00\xf8\x00\xd0\x00\xcf\x00\xcf\x00\xcf\x00\xf7\x00\xa2\x00\xa3\x00\xcf\x00\xcf\x00\xa7\x00\xcb\x00\xcf\x00\xcf\x00\xd6\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd4\x00\xa8\x00\xcf\x00\xcf\x00\xcf\x00\xd1\x00\xcf\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xa5\x00\xcf\x00\xa6\x00\xcf\x00\xbd\x00\xa9\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xab\x00\xcd\x00\xac\x00\xcf\x00\x5d\x00\xdc\x00\xdc\x00\xff\xff\x5f\x00\x73\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x6c\x00\x5d\x00\x5d\x00\x5d\x00\xff\xff\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x5d\x00\xd7\x00\xd7\x00\x75\x00\xff\xff\xff\xff\x63\x00\x1f\x00\x85\x00\x5d\x00\x5d\x00\xff\xff\x90\x00\x0e\x00\x5f\x00\x79\x00\x5d\x00\x5d\x00\x5d\x00\x94\x00\x5b\x00\x49\x00\x0e\x00\xff\xff\xff\xff\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x61\x00\x62\x00\x5d\x00\x5d\x00\x48\x00\x7b\x00\xc5\x00\x5f\x00\x79\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x4e\x00\x00\x00\x0e\x00\x5f\x00\x79\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\xc6\x00\x64\x00\x6e\x00\x5f\x00\x9f\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x8e\x00\x88\x00\x7b\x00\xc7\x00\xc9\x00\xc7\x00\x8e\x00\xca\x00\x5d\x00\xef\x00\xf0\x00\x7b\x00\x0e\x00\xf1\x00\xf2\x00\xf4\x00\xf6\x00\x5d\x00\x00\x00\x00\x00\x5d\x00\x0e\x00\x00\x00\x00\x00\x5f\x00\x0c\x00\x5d\x00\x5d\x00\x5d\x00\x1d\x00\x0e\x00\x00\x00\x00\x00\x26\x00\x0c\x00\xe8\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x5e\x00\x5d\x00\xd7\x00\xd7\x00\x60\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\x00\x00\x00\x00\x3c\x00\x8e\x00\x00\x00\x0e\x00\x00\x00\x78\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x5e\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x5d\x00\x5d\x00\x5d\x00\x1c\x00\x9b\x00\x5d\x00\x84\x00\x00\x00\x8e\x00\x3c\x00\x78\x00\x5d\x00\x5d\x00\x5d\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x78\x00\x7c\x00\x5d\x00\xec\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x0c\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x00\x00\x0e\x00\xdc\x00\xdc\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x00\x00\x00\x00\x2f\x00\x5d\x00\x00\x00\x00\x00\x19\x00\x5e\x00\x2f\x00\x2f\x00\x2f\x00\x0c\x00\xff\xff\x5e\x00\x5e\x00\x5e\x00\x0d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x00\x00\xc4\x00\xc2\x00\x5e\x00\x49\x00\x5d\x00\x83\x00\x00\x00\x00\x00\x5f\x00\x7d\x00\x5d\x00\x5d\x00\x5d\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x5d\x00\x27\x00\x0c\x00\x1b\x00\x00\x00\x2e\x00\x2e\x00\x2e\x00\xa1\x00\xa3\x00\x00\x00\x00\x00\xa7\x00\x0e\x00\x00\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x00\x00\x2e\x00\xa8\x00\x59\x00\x29\x00\x00\x00\x0c\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xa4\x00\x00\x00\xa6\x00\x28\x00\xc2\x00\xa9\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xaa\x00\x00\x00\xac\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x22\x00\x11\x00\x11\x00\x11\x00\x11\x00\x22\x00\x22\x00\x22\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x2f\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x58\x00\x00\x00\x22\x00\x8c\x00\x8e\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x2f\x00\x00\x00\x5a\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x8e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x80\x00\x80\x00\x80\x00\x8e\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x36\x00\x00\x00\x12\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x81\x00\x81\x00\x81\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x13\x00\x13\x00\x13\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x3b\x00\x00\x00\x16\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x2e\x00\x2e\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x8d\x00\x8e\x00\x00\x00\x22\x00\x00\x00\x00\x00\x1a\x00\x8e\x00\x00\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x2b\x00\x2b\x00\x2b\x00\x4d\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x40\x00\x00\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x8e\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x1c\x00\x2b\x00\x52\x00\x8e\x00\x00\x00\x00\x00\x3c\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x34\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x34\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x69\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x39\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x3f\x00\x00\x00\x3f\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\x44\x00\x00\x00\x44\x00\x00\x00\x3e\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\x41\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x46\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x34\x00\x00\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\x47\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x4b\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x39\x00\x00\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xba\x00\xb6\x00\x00\x00\x4c\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xb9\x00\xb5\x00\x4d\x00\xd2\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb2\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb8\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\xd2\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb1\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb7\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\xd2\x00\xed\x00\xd2\x00\x52\x00\x52\x00\x52\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x11\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x52\x00\x00\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x52\x00\x8e\x00\x99\x00\x53\x00\x53\x00\x53\x00\xf3\x00\x00\x00\x00\x00\x53\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x68\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x68\x00\x98\x00\x53\x00\x53\x00\x53\x00\xf5\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x97\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x96\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x35\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x95\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x93\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x87\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x82\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\xff\xff\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x71\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x6b\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x86\x00\x86\x00\x86\x00\x6d\x00\x86\x00\x86\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x86\x00\xff\xff\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x86\x00\x00\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x86\x00\x86\x00\x00\x00\x6d\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x86\x00\x86\x00\x86\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x6f\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x00\xcf\x00\x86\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\x6f\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x00\x00\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7e\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x80\x00\x80\x00\x80\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\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\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x81\x00\x81\x00\x81\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5a\x00\x5a\x00\x82\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x85\x00\x85\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x59\x00\x59\x00\x59\x00\x59\x00\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x59\x00\x87\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x59\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x00\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x8a\x00\x80\x00\x80\x00\x80\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\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\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x80\x00\x81\x00\x81\x00\x81\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x13\x00\x13\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\x00\x9e\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x00\x00\x2b\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x53\x00\x53\x00\x53\x00\x55\x00\x57\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x56\x00\x53\x00\x53\x00\x53\x00\x54\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x53\x00\x00\x00\x8f\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xad\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xae\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xaf\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb0\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\xb5\x00\xb5\x00\xb5\x00\xb3\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb5\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\xb6\x00\xb6\x00\xb6\x00\xb4\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb6\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xba\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbf\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x44\x00\x00\x00\x00\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xbc\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x00\x00\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc2\x00\xc3\x00\xc3\x00\xc3\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc3\x00\xc4\x00\xc4\x00\xc4\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xc4\x00\x00\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xc4\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x70\x00\xcf\x00\xcf\x00\xdb\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x2a\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x9c\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\x8b\x00\xcf\x00\xcf\x00\x91\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x92\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x9e\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\xa0\x00\xcf\x00\xcf\x00\x00\x00\xcc\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x9e\x00\x00\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9e\x00\x9d\x00\xcf\x00\xcf\x00\xcf\x00\xeb\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\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x3c\x00\x00\x00\xcf\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\xcf\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\xcf\x00\x9d\x00\xd2\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x00\x00\xcf\x00\xd2\x00\xcf\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xd3\x00\x00\x00\x00\x00\xd2\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\xd2\x00\x00\x00\x00\x00\x00\x00\xd3\x00\x00\x00\xd3\x00\xd3\x00\xd3\x00\xd3\x00\xd4\x00\x00\x00\x00\x00\xd3\x00\xd3\x00\x00\x00\xd3\x00\xd3\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\xd3\x00\xd2\x00\xd3\x00\xd3\x00\xd3\x00\xd3\x00\xd3\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\x00\x00\x00\x00\x00\x00\xd4\x00\xd4\x00\x00\x00\xd4\x00\xd4\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd2\x00\xd3\x00\xd4\x00\xd3\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xd4\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\xd5\x00\x00\x00\xd3\x00\x00\x00\xd3\x00\xd4\x00\x00\x00\xd4\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\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\xd4\x00\x4f\x00\xd4\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x4b\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x40\x00\x00\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\xda\x00\x4c\x00\x00\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\xd9\x00\x49\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x46\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xf3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\xdf\x00\x00\x00\x47\x00\x00\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\x00\x00\xf5\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\xe1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x3c\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\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\x37\x00\x00\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\xe3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x2d\x00\x01\x00\x02\x00\x2d\x00\x04\x00\x05\x00\x06\x00\x65\x00\x65\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7d\x00\x7d\x00\x7d\x00\x61\x00\x2d\x00\x2d\x00\x2d\x00\x69\x00\x6d\x00\x69\x00\x67\x00\x61\x00\x72\x00\x6e\x00\x0a\x00\x6e\x00\x0a\x00\x0a\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\x05\x00\x30\x00\x31\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x0a\x00\x0a\x00\x0a\x00\x09\x00\x2d\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x20\x00\x30\x00\x31\x00\x23\x00\x0a\x00\x0a\x00\x2d\x00\x6c\x00\x23\x00\x20\x00\x05\x00\x0a\x00\x7c\x00\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x7c\x00\x21\x00\x5f\x00\x2d\x00\x0a\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2d\x00\x2d\x00\x20\x00\x05\x00\x5f\x00\x23\x00\x23\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x5f\x00\xff\xff\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\x23\x00\x2d\x00\x2d\x00\x09\x00\x23\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x24\x00\x7d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x2a\x00\x23\x00\x20\x00\x23\x00\x23\x00\x23\x00\x2d\x00\x23\x00\x23\x00\x23\x00\x23\x00\x20\x00\xff\xff\xff\xff\x05\x00\x2d\x00\xff\xff\xff\xff\x09\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\x6c\x00\x2d\x00\xff\xff\xff\xff\x70\x00\x7b\x00\x23\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x05\x00\x20\x00\x30\x00\x31\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x45\x00\x5e\x00\xff\xff\x2d\x00\xff\xff\x7b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x05\x00\xff\xff\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x5f\x00\x7c\x00\x05\x00\x2d\x00\xff\xff\x7c\x00\x65\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\x7b\x00\x7c\x00\x20\x00\x23\x00\x05\x00\xff\xff\xff\xff\xff\xff\x09\x00\x7b\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x2d\x00\x30\x00\x31\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\x05\x00\x20\x00\xff\xff\xff\xff\x23\x00\x05\x00\x0b\x00\x0c\x00\x0d\x00\x7b\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\x00\xff\xff\xff\xff\x01\x00\x02\x00\x20\x00\x5f\x00\x05\x00\x7b\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\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\x05\x00\x20\x00\x5f\x00\x7b\x00\x23\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\x28\x00\x29\x00\xff\xff\xff\xff\x2c\x00\x2d\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\x20\x00\x3b\x00\x22\x00\x5f\x00\xff\xff\x7b\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\xff\xff\x5d\x00\x5f\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\xff\xff\x7d\x00\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x05\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x20\x00\xff\xff\x20\x00\x23\x00\x24\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x20\x00\xff\xff\x22\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\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\x5e\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\x01\x00\x02\x00\x03\x00\x7c\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x2b\x00\xff\xff\x2d\x00\xff\xff\x20\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\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\x5f\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x20\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\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\x5f\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\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\x2b\x00\xff\xff\x2d\x00\xff\xff\x20\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\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\x5f\x00\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\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x24\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x2a\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x01\x00\x02\x00\x03\x00\x5f\x00\xff\xff\xff\xff\x07\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\x5e\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5f\x00\x01\x00\x02\x00\x7c\x00\xff\xff\xff\xff\x65\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\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\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\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\x70\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\x5f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\x5e\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\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\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\x5f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\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\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\x5f\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\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\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x50\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x01\x00\x02\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x01\x00\x02\x00\x5f\x00\x04\x00\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\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\xff\xff\x5c\x00\xff\xff\x5e\x00\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\x7c\x00\x23\x00\x7e\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\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\x23\x00\x24\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x2a\x00\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\x5f\x00\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\x5e\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\x7c\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x23\x00\xff\xff\xff\xff\x07\x00\xff\xff\x0a\x00\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\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x2a\x00\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\x5f\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\xff\xff\xff\xff\x5e\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\x7c\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x23\x00\xff\xff\xff\xff\x07\x00\xff\xff\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\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\x5f\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\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\x00\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\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\x5f\x00\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\x00\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\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\x5f\x00\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\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\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\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\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\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\x04\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x45\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x02\x00\x03\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\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\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\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\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\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\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\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\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\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\x01\x00\x02\x00\x03\x00\x04\x00\xff\xff\x06\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\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\x01\x00\x02\x00\x03\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\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\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\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\x01\x00\x02\x00\x03\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\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\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\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\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\x7c\x00\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x2d\x00\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x01\x00\x02\x00\x03\x00\xff\xff\xff\xff\xff\xff\x07\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\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x04\x00\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\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x04\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\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\x04\x00\x2d\x00\x2e\x00\x2f\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\x7c\x00\x7d\x00\x7e\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x02\x00\xff\xff\x04\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x3a\x00\x7e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\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\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\x5c\x00\xff\xff\x5e\x00\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\x02\x00\x7c\x00\x04\x00\x7e\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\x45\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\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\x5c\x00\xff\xff\x5e\x00\x5f\x00\x04\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\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x04\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\xff\xff\x7e\x00\x5c\x00\x3a\x00\x5e\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x7c\x00\xff\xff\x7e\x00\x5c\x00\xff\xff\x5e\x00\xff\xff\x42\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x5f\x00\x7e\x00\xff\xff\x62\x00\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x78\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x42\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x78\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\x23\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\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\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x45\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\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\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\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"#

    alex_deflt :: AlexAddr
    alex_deflt = AlexA#
      "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\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\x5b\x00\x5c\x00\xff\xff\x86\x00\xff\xff\x86\x00\xff\xff\xff\xff\xff\xff\x86\x00\x65\x00\x66\x00\x67\x00\x68\x00\x67\x00\x6a\x00\x6a\x00\x66\x00\x6a\x00\x66\x00\x6a\x00\x66\x00\x65\x00\x65\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\x86\x00\xff\xff\xff\xff\xff\xff\x86\x00\x86\x00\x86\x00\x86\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"#

    alex_accept = listArray (0 :: Int, 248)
      [ AlexAccNone
      , AlexAcc 209
      , AlexAccNone
      , AlexAcc 208
      , AlexAcc 207
      , AlexAcc 206
      , AlexAcc 205
      , AlexAcc 204
      , AlexAcc 203
      , 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
      , 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
      , AlexAcc 202
      , AlexAcc 201
      , AlexAccPred 200 ( isNormalComment )(AlexAccNone)
      , AlexAccPred 199 ( isNormalComment )(AlexAccNone)
      , AlexAccPred 198 ( isNormalComment )(AlexAccNone)
      , AlexAccPred 197 ( isNormalComment )(AlexAcc 196)
      , AlexAcc 195
      , AlexAcc 194
      , AlexAccPred 193 ( alexNotPred (ifExtension HaddockBit) )(AlexAccNone)
      , AlexAccPred 192 ( alexNotPred (ifExtension HaddockBit) )(AlexAcc 191)
      , AlexAccPred 190 ( alexNotPred (ifExtension HaddockBit) )(AlexAccPred 189 ( ifExtension HaddockBit )(AlexAccNone))
      , AlexAcc 188
      , AlexAccPred 187 ( atEOL )(AlexAccNone)
      , AlexAccPred 186 ( atEOL )(AlexAccNone)
      , AlexAccPred 185 ( atEOL )(AlexAcc 184)
      , AlexAccPred 183 ( atEOL )(AlexAcc 182)
      , AlexAccPred 181 ( atEOL )(AlexAccPred 180 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 179 ( followedByOpeningToken )(AlexAccPred 178 ( precededByClosingToken )(AlexAcc 177))))
      , AlexAccPred 176 ( atEOL )(AlexAccPred 175 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 174 ( followedByOpeningToken )(AlexAccPred 173 ( precededByClosingToken )(AlexAcc 172))))
      , AlexAccPred 171 ( atEOL )(AlexAccNone)
      , AlexAccPred 170 ( atEOL )(AlexAcc 169)
      , AlexAccSkip
      , AlexAccPred 168 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone)
      , AlexAccPred 167 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False) `alexAndPred`  followedByDigit )(AlexAccNone)
      , AlexAccSkipPred (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone)
      , AlexAccSkipPred (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone)
      , AlexAccPred 166 ( notFollowedBy '-' )(AlexAccNone)
      , AlexAccSkip
      , AlexAccPred 165 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone)
      , AlexAccPred 164 (alexPrevCharMatches(\c -> c >= '\n' && c <= '\n' || False))(AlexAccNone)
      , AlexAccPred 163 ( notFollowedBySymbol )(AlexAccNone)
      , AlexAcc 162
      , AlexAccPred 161 ( known_pragma linePrags )(AlexAccNone)
      , AlexAccPred 160 ( known_pragma linePrags )(AlexAcc 159)
      , AlexAccPred 158 ( known_pragma linePrags )(AlexAccPred 157 ( known_pragma oneWordPrags )(AlexAccPred 156 ( known_pragma ignoredPrags )(AlexAccPred 155 ( known_pragma fileHeaderPrags )(AlexAccNone))))
      , AlexAccPred 154 ( known_pragma linePrags )(AlexAccPred 153 ( known_pragma oneWordPrags )(AlexAccPred 152 ( known_pragma ignoredPrags )(AlexAccPred 151 ( known_pragma fileHeaderPrags )(AlexAccNone))))
      , AlexAcc 150
      , AlexAcc 149
      , AlexAcc 148
      , AlexAcc 147
      , AlexAcc 146
      , AlexAcc 145
      , AlexAcc 144
      , AlexAcc 143
      , AlexAccPred 142 ( known_pragma twoWordPrags )(AlexAccNone)
      , AlexAcc 141
      , AlexAcc 140
      , AlexAcc 139
      , AlexAccPred 138 ( ifExtension HaddockBit )(AlexAccNone)
      , AlexAcc 137
      , AlexAcc 136
      , AlexAcc 135
      , AlexAcc 134
      , AlexAccPred 133 ( ifExtension ThQuotesBit )(AlexAccPred 132 ( ifExtension QqBit )(AlexAccNone))
      , AlexAccPred 131 ( ifExtension ThQuotesBit )(AlexAccNone)
      , AlexAccPred 130 ( ifExtension ThQuotesBit )(AlexAccPred 129 ( ifExtension QqBit )(AlexAccNone))
      , AlexAccPred 128 ( ifExtension ThQuotesBit )(AlexAccPred 127 ( ifExtension QqBit )(AlexAccNone))
      , AlexAccPred 126 ( ifExtension ThQuotesBit )(AlexAccPred 125 ( ifExtension QqBit )(AlexAccNone))
      , AlexAccPred 124 ( ifExtension QqBit )(AlexAccNone)
      , AlexAccPred 123 ( ifExtension QqBit )(AlexAccNone)
      , AlexAccPred 122 ( ifCurrentChar '⟦' `alexAndPred`
            ifExtension UnicodeSyntaxBit `alexAndPred`
            ifExtension ThQuotesBit )(AlexAccPred 121 ( ifCurrentChar '⟧' `alexAndPred`
            ifExtension UnicodeSyntaxBit `alexAndPred`
            ifExtension ThQuotesBit )(AlexAccPred 120 ( ifCurrentChar '⦇' `alexAndPred`
            ifExtension UnicodeSyntaxBit `alexAndPred`
            ifExtension ArrowsBit )(AlexAccPred 119 ( ifCurrentChar '⦈' `alexAndPred`
            ifExtension UnicodeSyntaxBit `alexAndPred`
            ifExtension ArrowsBit )(AlexAccNone))))
      , AlexAccPred 118 ( ifExtension ArrowsBit `alexAndPred`
            notFollowedBySymbol )(AlexAccNone)
      , AlexAccPred 117 ( ifExtension ArrowsBit )(AlexAccNone)
      , AlexAccPred 116 ( ifExtension IpBit )(AlexAccNone)
      , AlexAccPred 115 ( ifExtension OverloadedLabelsBit )(AlexAccNone)
      , AlexAccPred 114 ( ifExtension UnboxedTuplesBit `alexOrPred`
               ifExtension UnboxedSumsBit )(AlexAccNone)
      , AlexAccPred 113 ( ifExtension UnboxedTuplesBit `alexOrPred`
               ifExtension UnboxedSumsBit )(AlexAccNone)
      , AlexAcc 112
      , AlexAcc 111
      , AlexAcc 110
      , AlexAcc 109
      , AlexAcc 108
      , AlexAcc 107
      , AlexAcc 106
      , AlexAcc 105
      , AlexAcc 104
      , AlexAcc 103
      , AlexAcc 102
      , AlexAcc 101
      , AlexAcc 100
      , AlexAcc 99
      , AlexAccPred 98 ( ifExtension RecursiveDoBit )(AlexAcc 97)
      , AlexAccPred 96 ( ifExtension RecursiveDoBit )(AlexAcc 95)
      , AlexAcc 94
      , AlexAcc 93
      , AlexAcc 92
      , AlexAcc 91
      , AlexAcc 90
      , AlexAcc 89
      , AlexAcc 88
      , AlexAcc 87
      , AlexAcc 86
      , AlexAcc 85
      , AlexAcc 84
      , AlexAcc 83
      , AlexAcc 82
      , AlexAcc 81
      , AlexAcc 80
      , AlexAcc 79
      , AlexAcc 78
      , AlexAcc 77
      , AlexAcc 76
      , AlexAcc 75
      , AlexAccPred 74 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 73 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 72 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 71 ( ifExtension MagicHashBit )(AlexAccPred 70 ( ifExtension MagicHashBit )(AlexAccNone))
      , AlexAccPred 69 ( ifExtension MagicHashBit )(AlexAccPred 68 ( ifExtension MagicHashBit )(AlexAccNone))
      , AlexAccPred 67 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 66 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 65 ( followedByOpeningToken )(AlexAccPred 64 ( precededByClosingToken )(AlexAcc 63)))
      , AlexAccPred 62 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 61 ( followedByOpeningToken )(AlexAccPred 60 ( precededByClosingToken )(AlexAcc 59)))
      , AlexAccPred 58 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 57 ( followedByOpeningToken )(AlexAccPred 56 ( precededByClosingToken )(AlexAcc 55)))
      , AlexAccPred 54 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 53 ( followedByOpeningToken )(AlexAccPred 52 ( precededByClosingToken )(AlexAcc 51)))
      , AlexAccPred 50 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 49 ( followedByOpeningToken )(AlexAccPred 48 ( precededByClosingToken )(AlexAcc 47)))
      , AlexAccPred 46 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 45 ( followedByOpeningToken )(AlexAccPred 44 ( precededByClosingToken )(AlexAcc 43)))
      , AlexAccPred 42 ( precededByClosingToken `alexAndPred` followedByOpeningToken )(AlexAccPred 41 ( followedByOpeningToken )(AlexAccPred 40 ( precededByClosingToken )(AlexAcc 39)))
      , AlexAcc 38
      , AlexAcc 37
      , AlexAcc 36
      , AlexAcc 35
      , AlexAcc 34
      , AlexAccPred 33 ( ifExtension BinaryLiteralsBit )(AlexAccNone)
      , AlexAcc 32
      , AlexAcc 31
      , AlexAccPred 30 ( negLitPred )(AlexAccNone)
      , AlexAccPred 29 ( negLitPred )(AlexAccNone)
      , AlexAccPred 28 ( negLitPred `alexAndPred`
                                               ifExtension BinaryLiteralsBit )(AlexAccNone)
      , AlexAccPred 27 ( negLitPred )(AlexAccNone)
      , AlexAccPred 26 ( negLitPred )(AlexAccNone)
      , AlexAcc 25
      , AlexAcc 24
      , AlexAccPred 23 ( negLitPred )(AlexAccNone)
      , AlexAccPred 22 ( negLitPred )(AlexAccNone)
      , AlexAccPred 21 ( ifExtension HexFloatLiteralsBit )(AlexAccNone)
      , AlexAccPred 20 ( ifExtension HexFloatLiteralsBit )(AlexAccNone)
      , AlexAccPred 19 ( ifExtension HexFloatLiteralsBit `alexAndPred`
                                               negLitPred )(AlexAccNone)
      , AlexAccPred 18 ( ifExtension HexFloatLiteralsBit `alexAndPred`
                                               negLitPred )(AlexAccNone)
      , AlexAccPred 17 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 16 ( ifExtension MagicHashBit `alexAndPred`
                                               ifExtension BinaryLiteralsBit )(AlexAccNone)
      , AlexAccPred 15 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 14 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 13 ( negHashLitPred )(AlexAccNone)
      , AlexAccPred 12 ( negHashLitPred `alexAndPred`
                                               ifExtension BinaryLiteralsBit )(AlexAccNone)
      , AlexAccPred 11 ( negHashLitPred )(AlexAccNone)
      , AlexAccPred 10 ( negHashLitPred )(AlexAccNone)
      , AlexAccPred 9 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 8 ( ifExtension MagicHashBit `alexAndPred`
                                               ifExtension BinaryLiteralsBit )(AlexAccNone)
      , AlexAccPred 7 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 6 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 5 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 4 ( ifExtension MagicHashBit )(AlexAccNone)
      , AlexAccPred 3 ( negHashLitPred )(AlexAccNone)
      , AlexAccPred 2 ( negHashLitPred )(AlexAccNone)
      , AlexAcc 1
      , AlexAcc 0
      ]

    alex_actions = array (0 :: Int, 210)
      [ (209,alex_action_14)
      , (208,alex_action_20)
      , (207,alex_action_21)
      , (206,alex_action_19)
      , (205,alex_action_22)
      , (204,alex_action_26)
      , (203,alex_action_27)
      , (202,alex_action_1)
      , (201,alex_action_1)
      , (200,alex_action_2)
      , (199,alex_action_2)
      , (198,alex_action_2)
      , (197,alex_action_2)
      , (196,alex_action_27)
      , (195,alex_action_3)
      , (194,alex_action_4)
      , (193,alex_action_5)
      , (192,alex_action_5)
      , (191,alex_action_27)
      , (190,alex_action_5)
      , (189,alex_action_38)
      , (188,alex_action_6)
      , (187,alex_action_7)
      , (186,alex_action_7)
      , (185,alex_action_7)
      , (184,alex_action_27)
      , (183,alex_action_7)
      , (182,alex_action_27)
      , (181,alex_action_7)
      , (180,alex_action_80)
      , (179,alex_action_81)
      , (178,alex_action_82)
      , (177,alex_action_83)
      , (176,alex_action_7)
      , (175,alex_action_80)
      , (174,alex_action_81)
      , (173,alex_action_82)
      , (172,alex_action_83)
      , (171,alex_action_8)
      , (170,alex_action_8)
      , (169,alex_action_27)
      , (168,alex_action_10)
      , (167,alex_action_11)
      , (166,alex_action_15)
      , (165,alex_action_17)
      , (164,alex_action_17)
      , (163,alex_action_18)
      , (162,alex_action_23)
      , (161,alex_action_24)
      , (160,alex_action_24)
      , (159,alex_action_27)
      , (158,alex_action_24)
      , (157,alex_action_32)
      , (156,alex_action_33)
      , (155,alex_action_35)
      , (154,alex_action_24)
      , (153,alex_action_32)
      , (152,alex_action_33)
      , (151,alex_action_36)
      , (150,alex_action_25)
      , (149,alex_action_27)
      , (148,alex_action_27)
      , (147,alex_action_27)
      , (146,alex_action_27)
      , (145,alex_action_28)
      , (144,alex_action_29)
      , (143,alex_action_30)
      , (142,alex_action_31)
      , (141,alex_action_34)
      , (140,alex_action_37)
      , (139,alex_action_37)
      , (138,alex_action_39)
      , (137,alex_action_40)
      , (136,alex_action_41)
      , (135,alex_action_42)
      , (134,alex_action_43)
      , (133,alex_action_44)
      , (132,alex_action_49)
      , (131,alex_action_45)
      , (130,alex_action_46)
      , (129,alex_action_49)
      , (128,alex_action_47)
      , (127,alex_action_49)
      , (126,alex_action_48)
      , (125,alex_action_49)
      , (124,alex_action_49)
      , (123,alex_action_50)
      , (122,alex_action_51)
      , (121,alex_action_52)
      , (120,alex_action_55)
      , (119,alex_action_56)
      , (118,alex_action_53)
      , (117,alex_action_54)
      , (116,alex_action_57)
      , (115,alex_action_58)
      , (114,alex_action_59)
      , (113,alex_action_60)
      , (112,alex_action_61)
      , (111,alex_action_61)
      , (110,alex_action_62)
      , (109,alex_action_63)
      , (108,alex_action_63)
      , (107,alex_action_64)
      , (106,alex_action_65)
      , (105,alex_action_66)
      , (104,alex_action_67)
      , (103,alex_action_68)
      , (102,alex_action_68)
      , (101,alex_action_69)
      , (100,alex_action_70)
      , (99,alex_action_70)
      , (98,alex_action_71)
      , (97,alex_action_72)
      , (96,alex_action_71)
      , (95,alex_action_72)
      , (94,alex_action_72)
      , (93,alex_action_72)
      , (92,alex_action_72)
      , (91,alex_action_72)
      , (90,alex_action_72)
      , (89,alex_action_72)
      , (88,alex_action_72)
      , (87,alex_action_72)
      , (86,alex_action_73)
      , (85,alex_action_73)
      , (84,alex_action_74)
      , (83,alex_action_74)
      , (82,alex_action_74)
      , (81,alex_action_74)
      , (80,alex_action_74)
      , (79,alex_action_74)
      , (78,alex_action_74)
      , (77,alex_action_74)
      , (76,alex_action_75)
      , (75,alex_action_75)
      , (74,alex_action_76)
      , (73,alex_action_77)
      , (72,alex_action_78)
      , (71,alex_action_78)
      , (70,alex_action_111)
      , (69,alex_action_78)
      , (68,alex_action_112)
      , (67,alex_action_79)
      , (66,alex_action_80)
      , (65,alex_action_81)
      , (64,alex_action_82)
      , (63,alex_action_83)
      , (62,alex_action_80)
      , (61,alex_action_81)
      , (60,alex_action_82)
      , (59,alex_action_83)
      , (58,alex_action_80)
      , (57,alex_action_81)
      , (56,alex_action_82)
      , (55,alex_action_83)
      , (54,alex_action_80)
      , (53,alex_action_81)
      , (52,alex_action_82)
      , (51,alex_action_83)
      , (50,alex_action_80)
      , (49,alex_action_81)
      , (48,alex_action_82)
      , (47,alex_action_83)
      , (46,alex_action_80)
      , (45,alex_action_81)
      , (44,alex_action_82)
      , (43,alex_action_83)
      , (42,alex_action_80)
      , (41,alex_action_81)
      , (40,alex_action_82)
      , (39,alex_action_83)
      , (38,alex_action_84)
      , (37,alex_action_85)
      , (36,alex_action_86)
      , (35,alex_action_87)
      , (34,alex_action_87)
      , (33,alex_action_88)
      , (32,alex_action_89)
      , (31,alex_action_90)
      , (30,alex_action_91)
      , (29,alex_action_91)
      , (28,alex_action_92)
      , (27,alex_action_93)
      , (26,alex_action_94)
      , (25,alex_action_95)
      , (24,alex_action_95)
      , (23,alex_action_96)
      , (22,alex_action_96)
      , (21,alex_action_97)
      , (20,alex_action_97)
      , (19,alex_action_98)
      , (18,alex_action_98)
      , (17,alex_action_99)
      , (16,alex_action_100)
      , (15,alex_action_101)
      , (14,alex_action_102)
      , (13,alex_action_103)
      , (12,alex_action_104)
      , (11,alex_action_105)
      , (10,alex_action_106)
      , (9,alex_action_107)
      , (8,alex_action_108)
      , (7,alex_action_109)
      , (6,alex_action_110)
      , (5,alex_action_111)
      , (4,alex_action_112)
      , (3,alex_action_113)
      , (2,alex_action_114)
      , (1,alex_action_115)
      , (0,alex_action_116)
      ]

    {-# LINE 686 "compiler/./GHC/Parser/Lexer.x" #-}

    -- -----------------------------------------------------------------------------
    -- The token type

    data Token
      = ITas                        -- Haskell keywords
      | ITcase
      | ITclass
      | ITdata
      | ITdefault
      | ITderiving
      | ITdo (Maybe FastString)
      | ITelse
      | IThiding
      | ITforeign
      | ITif
      | ITimport
      | ITin
      | ITinfix
      | ITinfixl
      | ITinfixr
      | ITinstance
      | ITlet
      | ITmodule
      | ITnewtype
      | ITof
      | ITqualified
      | ITthen
      | ITtype
      | ITwhere

      | ITforall            IsUnicodeSyntax -- GHC extension keywords
      | ITexport
      | ITlabel
      | ITdynamic
      | ITsafe
      | ITinterruptible
      | ITunsafe
      | ITstdcallconv
      | ITccallconv
      | ITcapiconv
      | ITprimcallconv
      | ITjavascriptcallconv
      | ITmdo (Maybe FastString)
      | ITfamily
      | ITrole
      | ITgroup
      | ITby
      | ITusing
      | ITpattern
      | ITstatic
      | ITstock
      | ITanyclass
      | ITvia

      -- Backpack tokens
      | ITunit
      | ITsignature
      | ITdependency
      | ITrequires

      -- Pragmas, see  note [Pragma source text] in "GHC.Types.Basic"
      | ITinline_prag       SourceText InlineSpec RuleMatchInfo
      | ITspec_prag         SourceText                -- SPECIALISE
      | ITspec_inline_prag  SourceText Bool    -- SPECIALISE INLINE (or NOINLINE)
      | ITsource_prag       SourceText
      | ITrules_prag        SourceText
      | ITwarning_prag      SourceText
      | ITdeprecated_prag   SourceText
      | ITline_prag         SourceText  -- not usually produced, see 'UsePosPragsBit'
      | ITcolumn_prag       SourceText  -- not usually produced, see 'UsePosPragsBit'
      | ITscc_prag          SourceText
      | ITunpack_prag       SourceText
      | ITnounpack_prag     SourceText
      | ITann_prag          SourceText
      | ITcomplete_prag     SourceText
      | ITclose_prag
      | IToptions_prag String
      | ITinclude_prag String
      | ITlanguage_prag
      | ITminimal_prag      SourceText
      | IToverlappable_prag SourceText  -- instance overlap mode
      | IToverlapping_prag  SourceText  -- instance overlap mode
      | IToverlaps_prag     SourceText  -- instance overlap mode
      | ITincoherent_prag   SourceText  -- instance overlap mode
      | ITctype             SourceText
      | ITcomment_line_prag         -- See Note [Nested comment line pragmas]

      | ITdotdot                    -- reserved symbols
      | ITcolon
      | ITdcolon            IsUnicodeSyntax
      | ITequal
      | ITlam
      | ITlcase
      | ITvbar
      | ITlarrow            IsUnicodeSyntax
      | ITrarrow            IsUnicodeSyntax
      | ITdarrow            IsUnicodeSyntax
      | ITlolly       -- The (⊸) arrow (for LinearTypes)
      | ITminus       -- See Note [Minus tokens]
      | ITprefixminus -- See Note [Minus tokens]
      | ITbang     -- Prefix (!) only, e.g. f !x = rhs
      | ITtilde    -- Prefix (~) only, e.g. f ~x = rhs
      | ITat       -- Tight infix (@) only, e.g. f x@pat = rhs
      | ITtypeApp  -- Prefix (@) only, e.g. f @t
      | ITpercent  -- Prefix (%) only, e.g. a %1 -> b
      | ITstar              IsUnicodeSyntax
      | ITdot
      | ITproj Bool -- Extension: OverloadedRecordDotBit

      | ITbiglam                    -- GHC-extension symbols

      | ITocurly                    -- special symbols
      | ITccurly
      | ITvocurly
      | ITvccurly
      | ITobrack
      | ITopabrack                  -- [:, for parallel arrays with -XParallelArrays
      | ITcpabrack                  -- :], for parallel arrays with -XParallelArrays
      | ITcbrack
      | IToparen
      | ITcparen
      | IToubxparen
      | ITcubxparen
      | ITsemi
      | ITcomma
      | ITunderscore
      | ITbackquote
      | ITsimpleQuote               --  '

      | ITvarid   FastString        -- identifiers
      | ITconid   FastString
      | ITvarsym  FastString
      | ITconsym  FastString
      | ITqvarid  (FastString,FastString)
      | ITqconid  (FastString,FastString)
      | ITqvarsym (FastString,FastString)
      | ITqconsym (FastString,FastString)

      | ITdupipvarid   FastString   -- GHC extension: implicit param: ?x
      | ITlabelvarid   FastString   -- Overloaded label: #x

      | ITchar     SourceText Char       -- Note [Literal source text] in "GHC.Types.Basic"
      | ITstring   SourceText FastString -- Note [Literal source text] in "GHC.Types.Basic"
      | ITinteger  IntegralLit           -- Note [Literal source text] in "GHC.Types.Basic"
      | ITrational FractionalLit

      | ITprimchar   SourceText Char     -- Note [Literal source text] in "GHC.Types.Basic"
      | ITprimstring SourceText ByteString -- Note [Literal source text] in "GHC.Types.Basic"
      | ITprimint    SourceText Integer  -- Note [Literal source text] in "GHC.Types.Basic"
      | ITprimword   SourceText Integer  -- Note [Literal source text] in "GHC.Types.Basic"
      | ITprimfloat  FractionalLit
      | ITprimdouble FractionalLit

      -- Template Haskell extension tokens
      | ITopenExpQuote HasE IsUnicodeSyntax --  [| or [e|
      | ITopenPatQuote                      --  [p|
      | ITopenDecQuote                      --  [d|
      | ITopenTypQuote                      --  [t|
      | ITcloseQuote IsUnicodeSyntax        --  |]
      | ITopenTExpQuote HasE                --  [|| or [e||
      | ITcloseTExpQuote                    --  ||]
      | ITdollar                            --  prefix $
      | ITdollardollar                      --  prefix $$
      | ITtyQuote                           --  ''
      | ITquasiQuote (FastString,FastString,PsSpan)
        -- ITquasiQuote(quoter, quote, loc)
        -- represents a quasi-quote of the form
        -- [quoter| quote |]
      | ITqQuasiQuote (FastString,FastString,FastString,PsSpan)
        -- ITqQuasiQuote(Qual, quoter, quote, loc)
        -- represents a qualified quasi-quote of the form
        -- [Qual.quoter| quote |]

      -- Arrow notation extension
      | ITproc
      | ITrec
      | IToparenbar  IsUnicodeSyntax -- ^ @(|@
      | ITcparenbar  IsUnicodeSyntax -- ^ @|)@
      | ITlarrowtail IsUnicodeSyntax -- ^ @-<@
      | ITrarrowtail IsUnicodeSyntax -- ^ @>-@
      | ITLarrowtail IsUnicodeSyntax -- ^ @-<<@
      | ITRarrowtail IsUnicodeSyntax -- ^ @>>-@

      | ITunknown String             -- ^ Used when the lexer can't make sense of it
      | ITeof                        -- ^ end of file token

      -- Documentation annotations. See Note [PsSpan in Comments]
      | ITdocCommentNext  String     PsSpan -- ^ something beginning @-- |@
      | ITdocCommentPrev  String     PsSpan -- ^ something beginning @-- ^@
      | ITdocCommentNamed String     PsSpan -- ^ something beginning @-- $@
      | ITdocSection      Int String PsSpan -- ^ a section heading
      | ITdocOptions      String     PsSpan -- ^ doc options (prune, ignore-exports, etc)
      | ITlineComment     String     PsSpan -- ^ comment starting by "--"
      | ITblockComment    String     PsSpan -- ^ comment in {- -}

      deriving Show

    instance Outputable Token where
      ppr x = text (show x)

    {- Note [PsSpan in Comments]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    When using the Api Annotations to exact print a modified AST, managing
    the space before a comment is important.  The PsSpan in the comment
    token allows this to happen.

    We also need to track the space before the end of file. The normal
    mechanism of using the previous token does not work, as the ITeof is
    synthesised to come at the same location of the last token, and the
    normal previous token updating has by then updated the required
    location.

    We track this using a 2-back location, prev_loc2. This adds extra
    processing to every single token, which is a performance hit for
    something needed only at the end of the file. This needs
    improving. Perhaps a backward scan on eof?
    -}

    {- Note [Minus tokens]
    ~~~~~~~~~~~~~~~~~~~~~~
    A minus sign can be used in prefix form (-x) and infix form (a - b).

    When LexicalNegation is on:
      * ITprefixminus  represents the prefix form
      * ITvarsym "-"   represents the infix form
      * ITminus        is not used

    When LexicalNegation is off:
      * ITminus        represents all forms
      * ITprefixminus  is not used
      * ITvarsym "-"   is not used
    -}

    {- Note [Why not LexicalNegationBit]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    One might wonder why we define NoLexicalNegationBit instead of
    LexicalNegationBit. The problem lies in the following line in reservedSymsFM:

        ,("-", ITminus, NormalSyntax, xbit NoLexicalNegationBit)

    We want to generate ITminus only when LexicalNegation is off. How would one
    do it if we had LexicalNegationBit? I (int-index) tried to use bitwise
    complement:

        ,("-", ITminus, NormalSyntax, complement (xbit LexicalNegationBit))

    This did not work, so I opted for NoLexicalNegationBit instead.
    -}

    -- the bitmap provided as the third component indicates whether the
    -- corresponding extension keyword is valid under the extension options
    -- provided to the compiler; if the extension corresponding to *any* of the
    -- bits set in the bitmap is enabled, the keyword is valid (this setup
    -- facilitates using a keyword in two different extensions that can be
    -- activated independently)
    --
    reservedWordsFM :: UniqFM FastString (Token, ExtsBitmap)
    reservedWordsFM = listToUFM $
        map (\(x, y, z) -> (mkFastString x, (y, z)))
            [( "_",              ITunderscore,    0 ),
             ( "as",             ITas,            0 ),
             ( "case",           ITcase,          0 ),
             ( "class",          ITclass,         0 ),
             ( "data",           ITdata,          0 ),
             ( "default",        ITdefault,       0 ),
             ( "deriving",       ITderiving,      0 ),
             ( "do",             ITdo Nothing,    0 ),
             ( "else",           ITelse,          0 ),
             ( "hiding",         IThiding,        0 ),
             ( "if",             ITif,            0 ),
             ( "import",         ITimport,        0 ),
             ( "in",             ITin,            0 ),
             ( "infix",          ITinfix,         0 ),
             ( "infixl",         ITinfixl,        0 ),
             ( "infixr",         ITinfixr,        0 ),
             ( "instance",       ITinstance,      0 ),
             ( "let",            ITlet,           0 ),
             ( "module",         ITmodule,        0 ),
             ( "newtype",        ITnewtype,       0 ),
             ( "of",             ITof,            0 ),
             ( "qualified",      ITqualified,     0 ),
             ( "then",           ITthen,          0 ),
             ( "type",           ITtype,          0 ),
             ( "where",          ITwhere,         0 ),

             ( "forall",         ITforall NormalSyntax, 0),
             ( "mdo",            ITmdo Nothing,   xbit RecursiveDoBit),
                 -- See Note [Lexing type pseudo-keywords]
             ( "family",         ITfamily,        0 ),
             ( "role",           ITrole,          0 ),
             ( "pattern",        ITpattern,       xbit PatternSynonymsBit),
             ( "static",         ITstatic,        xbit StaticPointersBit ),
             ( "stock",          ITstock,         0 ),
             ( "anyclass",       ITanyclass,      0 ),
             ( "via",            ITvia,           0 ),
             ( "group",          ITgroup,         xbit TransformComprehensionsBit),
             ( "by",             ITby,            xbit TransformComprehensionsBit),
             ( "using",          ITusing,         xbit TransformComprehensionsBit),

             ( "foreign",        ITforeign,       xbit FfiBit),
             ( "export",         ITexport,        xbit FfiBit),
             ( "label",          ITlabel,         xbit FfiBit),
             ( "dynamic",        ITdynamic,       xbit FfiBit),
             ( "safe",           ITsafe,          xbit FfiBit .|.
                                                  xbit SafeHaskellBit),
             ( "interruptible",  ITinterruptible, xbit InterruptibleFfiBit),
             ( "unsafe",         ITunsafe,        xbit FfiBit),
             ( "stdcall",        ITstdcallconv,   xbit FfiBit),
             ( "ccall",          ITccallconv,     xbit FfiBit),
             ( "capi",           ITcapiconv,      xbit CApiFfiBit),
             ( "prim",           ITprimcallconv,  xbit FfiBit),
             ( "javascript",     ITjavascriptcallconv, xbit FfiBit),

             ( "unit",           ITunit,          0 ),
             ( "dependency",     ITdependency,       0 ),
             ( "signature",      ITsignature,     0 ),

             ( "rec",            ITrec,           xbit ArrowsBit .|.
                                                  xbit RecursiveDoBit),
             ( "proc",           ITproc,          xbit ArrowsBit)
         ]

    {-----------------------------------
    Note [Lexing type pseudo-keywords]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    One might think that we wish to treat 'family' and 'role' as regular old
    varids whenever -XTypeFamilies and -XRoleAnnotations are off, respectively.
    But, there is no need to do so. These pseudo-keywords are not stolen syntax:
    they are only used after the keyword 'type' at the top-level, where varids are
    not allowed. Furthermore, checks further downstream (GHC.Tc.TyCl) ensure that
    type families and role annotations are never declared without their extensions
    on. In fact, by unconditionally lexing these pseudo-keywords as special, we
    can get better error messages.

    Also, note that these are included in the `varid` production in the parser --
    a key detail to make all this work.
    -------------------------------------}

    reservedSymsFM :: UniqFM FastString (Token, IsUnicodeSyntax, ExtsBitmap)
    reservedSymsFM = listToUFM $
        map (\ (x,w,y,z) -> (mkFastString x,(w,y,z)))
          [ ("..",  ITdotdot,                   NormalSyntax,  0 )
            -- (:) is a reserved op, meaning only list cons
           ,(":",   ITcolon,                    NormalSyntax,  0 )
           ,("::",  ITdcolon NormalSyntax,      NormalSyntax,  0 )
           ,("=",   ITequal,                    NormalSyntax,  0 )
           ,("\\",  ITlam,                      NormalSyntax,  0 )
           ,("|",   ITvbar,                     NormalSyntax,  0 )
           ,("<-",  ITlarrow NormalSyntax,      NormalSyntax,  0 )
           ,("->",  ITrarrow NormalSyntax,      NormalSyntax,  0 )
           ,("=>",  ITdarrow NormalSyntax,      NormalSyntax,  0 )
           ,("-",   ITminus,                    NormalSyntax,  xbit NoLexicalNegationBit)

           ,("*",   ITstar NormalSyntax,        NormalSyntax,  xbit StarIsTypeBit)

            -- For 'forall a . t'
           ,(".",   ITdot,                      NormalSyntax,  0 )

           ,("-<",  ITlarrowtail NormalSyntax,  NormalSyntax,  xbit ArrowsBit)
           ,(">-",  ITrarrowtail NormalSyntax,  NormalSyntax,  xbit ArrowsBit)
           ,("-<<", ITLarrowtail NormalSyntax,  NormalSyntax,  xbit ArrowsBit)
           ,(">>-", ITRarrowtail NormalSyntax,  NormalSyntax,  xbit ArrowsBit)

           ,("∷",   ITdcolon UnicodeSyntax,     UnicodeSyntax, 0 )
           ,("⇒",   ITdarrow UnicodeSyntax,     UnicodeSyntax, 0 )
           ,("∀",   ITforall UnicodeSyntax,     UnicodeSyntax, 0 )
           ,("→",   ITrarrow UnicodeSyntax,     UnicodeSyntax, 0 )
           ,("←",   ITlarrow UnicodeSyntax,     UnicodeSyntax, 0 )

           ,("⊸",   ITlolly, UnicodeSyntax, 0)

           ,("⤙",   ITlarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit)
           ,("⤚",   ITrarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit)
           ,("⤛",   ITLarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit)
           ,("⤜",   ITRarrowtail UnicodeSyntax, UnicodeSyntax, xbit ArrowsBit)

           ,("★",   ITstar UnicodeSyntax,       UnicodeSyntax, xbit StarIsTypeBit)

            -- ToDo: ideally, → and ∷ should be "specials", so that they cannot
            -- form part of a large operator.  This would let us have a better
            -- syntax for kinds: ɑ∷*→* would be a legal kind signature. (maybe).
           ]

    -- -----------------------------------------------------------------------------
    -- Lexer actions

    type Action = PsSpan -> StringBuffer -> Int -> P (PsLocated Token)

    special :: Token -> Action
    special tok span _buf _len = return (L span tok)

    token, layout_token :: Token -> Action
    token t span _buf _len = return (L span t)
    layout_token t span _buf _len = pushLexState layout >> return (L span t)

    idtoken :: (StringBuffer -> Int -> Token) -> Action
    idtoken f span buf len = return (L span $! (f buf len))

    qdo_token :: (Maybe FastString -> Token) -> Action
    qdo_token con span buf len = do
        maybe_layout token
        return (L span $! token)
      where
        !token = con $! Just $! fst $! splitQualName buf len False

    skip_one_varid :: (FastString -> Token) -> Action
    skip_one_varid f span buf len
      = return (L span $! f (lexemeToFastString (stepOn buf) (len-1)))

    skip_two_varid :: (FastString -> Token) -> Action
    skip_two_varid f span buf len
      = return (L span $! f (lexemeToFastString (stepOn (stepOn buf)) (len-2)))

    strtoken :: (String -> Token) -> Action
    strtoken f span buf len =
      return (L span $! (f $! lexemeToString buf len))

    begin :: Int -> Action
    begin code _span _str _len = do pushLexState code; lexToken

    pop :: Action
    pop _span _buf _len = do _ <- popLexState
                             lexToken
    -- See Note [Nested comment line pragmas]
    failLinePrag1 :: Action
    failLinePrag1 span _buf _len = do
      b <- getBit InNestedCommentBit
      if b then return (L span ITcomment_line_prag)
           else lexError LexErrorInPragma

    -- See Note [Nested comment line pragmas]
    popLinePrag1 :: Action
    popLinePrag1 span _buf _len = do
      b <- getBit InNestedCommentBit
      if b then return (L span ITcomment_line_prag) else do
        _ <- popLexState
        lexToken

    hopefully_open_brace :: Action
    hopefully_open_brace span buf len
     = do relaxed <- getBit RelaxedLayoutBit
          ctx <- getContext
          (AI l _) <- getInput
          let offset = srcLocCol (psRealLoc l)
              isOK = relaxed ||
                     case ctx of
                     Layout prev_off _ : _ -> prev_off < offset
                     _                     -> True
          if isOK then pop_and open_brace span buf len
                  else addFatalError $ PsError PsErrMissingBlock [] (mkSrcSpanPs span)

    pop_and :: Action -> Action
    pop_and act span buf len = do _ <- popLexState
                                  act span buf len

    -- See Note [Whitespace-sensitive operator parsing]
    followedByOpeningToken :: AlexAccPred ExtsBitmap
    followedByOpeningToken _ _ _ (AI _ buf)
      | atEnd buf = False
      | otherwise =
          case nextChar buf of
            ('{', buf') -> nextCharIsNot buf' (== '-')
            ('(', _) -> True
            ('[', _) -> True
            ('\"', _) -> True
            ('\'', _) -> True
            ('_', _) -> True
            ('⟦', _) -> True
            ('⦇', _) -> True
            (c, _) -> isAlphaNum c

    -- See Note [Whitespace-sensitive operator parsing]
    precededByClosingToken :: AlexAccPred ExtsBitmap
    precededByClosingToken _ (AI _ buf) _ _ =
      case prevChar buf '\n' of
        '}' -> decodePrevNChars 1 buf /= "-"
        ')' -> True
        ']' -> True
        '\"' -> True
        '\'' -> True
        '_' -> True
        '⟧' -> True
        '⦈' -> True
        c -> isAlphaNum c

    {-# INLINE nextCharIs #-}
    nextCharIs :: StringBuffer -> (Char -> Bool) -> Bool
    nextCharIs buf p = not (atEnd buf) && p (currentChar buf)

    {-# INLINE nextCharIsNot #-}
    nextCharIsNot :: StringBuffer -> (Char -> Bool) -> Bool
    nextCharIsNot buf p = not (nextCharIs buf p)

    notFollowedBy :: Char -> AlexAccPred ExtsBitmap
    notFollowedBy char _ _ _ (AI _ buf)
      = nextCharIsNot buf (== char)

    notFollowedBySymbol :: AlexAccPred ExtsBitmap
    notFollowedBySymbol _ _ _ (AI _ buf)
      = nextCharIsNot buf (`elem` "!#$%&*+./<=>?@\\^|-~")

    followedByDigit :: AlexAccPred ExtsBitmap
    followedByDigit _ _ _ (AI _ buf)
      = afterOptionalSpace buf (\b -> nextCharIs b (`elem` ['0'..'9']))

    ifCurrentChar :: Char -> AlexAccPred ExtsBitmap
    ifCurrentChar char _ (AI _ buf) _ _
      = nextCharIs buf (== char)

    -- We must reject doc comments as being ordinary comments everywhere.
    -- In some cases the doc comment will be selected as the lexeme due to
    -- maximal munch, but not always, because the nested comment rule is
    -- valid in all states, but the doc-comment rules are only valid in
    -- the non-layout states.
    isNormalComment :: AlexAccPred ExtsBitmap
    isNormalComment bits _ _ (AI _ buf)
      | HaddockBit `xtest` bits = notFollowedByDocOrPragma
      | otherwise               = nextCharIsNot buf (== '#')
      where
        notFollowedByDocOrPragma
           = afterOptionalSpace buf (\b -> nextCharIsNot b (`elem` "|^*$#"))

    afterOptionalSpace :: StringBuffer -> (StringBuffer -> Bool) -> Bool
    afterOptionalSpace buf p
        = if nextCharIs buf (== ' ')
          then p (snd (nextChar buf))
          else p buf

    atEOL :: AlexAccPred ExtsBitmap
    atEOL _ _ _ (AI _ buf) = atEnd buf || currentChar buf == '\n'

    -- Check if we should parse a negative literal (e.g. -123) as a single token.
    negLitPred :: AlexAccPred ExtsBitmap
    negLitPred =
        prefix_minus `alexAndPred`
        (negative_literals `alexOrPred` lexical_negation)
      where
        negative_literals = ifExtension NegativeLiteralsBit

        lexical_negation  =
          -- See Note [Why not LexicalNegationBit]
          alexNotPred (ifExtension NoLexicalNegationBit)

        prefix_minus =
          -- Note [prefix_minus in negLitPred and negHashLitPred]
          alexNotPred precededByClosingToken

    -- Check if we should parse an unboxed negative literal (e.g. -123#) as a single token.
    negHashLitPred :: AlexAccPred ExtsBitmap
    negHashLitPred = prefix_minus `alexAndPred` magic_hash
      where
        magic_hash = ifExtension MagicHashBit
        prefix_minus =
          -- Note [prefix_minus in negLitPred and negHashLitPred]
          alexNotPred precededByClosingToken

    {- Note [prefix_minus in negLitPred and negHashLitPred]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    We want to parse -1 as a single token, but x-1 as three tokens.
    So in negLitPred (and negHashLitPred) we require that we have a prefix
    occurrence of the minus sign. See Note [Whitespace-sensitive operator parsing]
    for a detailed definition of a prefix occurrence.

    The condition for a prefix occurrence of an operator is:

      not precededByClosingToken && followedByOpeningToken

    but we don't check followedByOpeningToken when parsing a negative literal.
    It holds simply because we immediately lex a literal after the minus.
    -}

    ifExtension :: ExtBits -> AlexAccPred ExtsBitmap
    ifExtension extBits bits _ _ _ = extBits `xtest` bits

    alexNotPred p userState in1 len in2
      = not (p userState in1 len in2)

    alexOrPred p1 p2 userState in1 len in2
      = p1 userState in1 len in2 || p2 userState in1 len in2

    multiline_doc_comment :: Action
    multiline_doc_comment span buf _len = withLexedDocType (worker "")
      where
        worker commentAcc input docType checkNextLine = case alexGetChar' input of
          Just ('\n', input')
            | checkNextLine -> case checkIfCommentLine input' of
              Just input -> worker ('\n':commentAcc) input docType checkNextLine
              Nothing -> docCommentEnd input commentAcc docType buf span
            | otherwise -> docCommentEnd input commentAcc docType buf span
          Just (c, input) -> worker (c:commentAcc) input docType checkNextLine
          Nothing -> docCommentEnd input commentAcc docType buf span

        -- Check if the next line of input belongs to this doc comment as well.
        -- A doc comment continues onto the next line when the following
        -- conditions are met:
        --   * The line starts with "--"
        --   * The line doesn't start with "---".
        --   * The line doesn't start with "-- $", because that would be the
        --     start of a /new/ named haddock chunk (#10398).
        checkIfCommentLine :: AlexInput -> Maybe AlexInput
        checkIfCommentLine input = check (dropNonNewlineSpace input)
          where
            check input = do
              ('-', input) <- alexGetChar' input
              ('-', input) <- alexGetChar' input
              (c, after_c) <- alexGetChar' input
              case c of
                '-' -> Nothing
                ' ' -> case alexGetChar' after_c of
                         Just ('$', _) -> Nothing
                         _ -> Just input
                _   -> Just input

            dropNonNewlineSpace input = case alexGetChar' input of
              Just (c, input')
                | isSpace c && c /= '\n' -> dropNonNewlineSpace input'
                | otherwise -> input
              Nothing -> input

    lineCommentToken :: Action
    lineCommentToken span buf len = do
      b <- getBit RawTokenStreamBit
      if b then do
             lt <- getLastLocComment
             strtoken (\s -> ITlineComment s lt) span buf len
           else lexToken

    {-
      nested comments require traversing by hand, they can't be parsed
      using regular expressions.
    -}
    nested_comment :: P (PsLocated Token) -> Action
    nested_comment cont span buf len = do
      input <- getInput
      go (reverse $ lexemeToString buf len) (1::Int) input
      where
        go commentAcc 0 input = do
          l <- getLastLocComment
          let finalizeComment str = (Nothing, ITblockComment str l)
          commentEnd cont input commentAcc finalizeComment buf span
        go commentAcc n input = case alexGetChar' input of
          Nothing -> errBrace input (psRealSpan span)
          Just ('-',input) -> case alexGetChar' input of
            Nothing  -> errBrace input (psRealSpan span)
            Just ('\125',input) -> go ('\125':'-':commentAcc) (n-1) input -- '}'
            Just (_,_)          -> go ('-':commentAcc) n input
          Just ('\123',input) -> case alexGetChar' input of  -- '{' char
            Nothing  -> errBrace input (psRealSpan span)
            Just ('-',input) -> go ('-':'\123':commentAcc) (n+1) input
            Just (_,_)       -> go ('\123':commentAcc) n input
          -- See Note [Nested comment line pragmas]
          Just ('\n',input) -> case alexGetChar' input of
            Nothing  -> errBrace input (psRealSpan span)
            Just ('#',_) -> do (parsedAcc,input) <- parseNestedPragma input
                               go (parsedAcc ++ '\n':commentAcc) n input
            Just (_,_)   -> go ('\n':commentAcc) n input
          Just (c,input) -> go (c:commentAcc) n input

    nested_doc_comment :: Action
    nested_doc_comment span buf _len = withLexedDocType (go "")
      where
        go commentAcc input docType _ = case alexGetChar' input of
          Nothing -> errBrace input (psRealSpan span)
          Just ('-',input) -> case alexGetChar' input of
            Nothing -> errBrace input (psRealSpan span)
            Just ('\125',input) ->
              docCommentEnd input commentAcc docType buf span
            Just (_,_) -> go ('-':commentAcc) input docType False
          Just ('\123', input) -> case alexGetChar' input of
            Nothing  -> errBrace input (psRealSpan span)
            Just ('-',input) -> do
              setInput input
              let cont = do input <- getInput; go commentAcc input docType False
              nested_comment cont span buf _len
            Just (_,_) -> go ('\123':commentAcc) input docType False
          -- See Note [Nested comment line pragmas]
          Just ('\n',input) -> case alexGetChar' input of
            Nothing  -> errBrace input (psRealSpan span)
            Just ('#',_) -> do (parsedAcc,input) <- parseNestedPragma input
                               go (parsedAcc ++ '\n':commentAcc) input docType False
            Just (_,_)   -> go ('\n':commentAcc) input docType False
          Just (c,input) -> go (c:commentAcc) input docType False

    -- See Note [Nested comment line pragmas]
    parseNestedPragma :: AlexInput -> P (String,AlexInput)
    parseNestedPragma input@(AI _ buf) = do
      origInput <- getInput
      setInput input
      setExts (.|. xbit InNestedCommentBit)
      pushLexState bol
      lt <- lexToken
      _ <- popLexState
      setExts (.&. complement (xbit InNestedCommentBit))
      postInput@(AI _ postBuf) <- getInput
      setInput origInput
      case unLoc lt of
        ITcomment_line_prag -> do
          let bytes = byteDiff buf postBuf
              diff  = lexemeToString buf bytes
          return (reverse diff, postInput)
        lt' -> panic ("parseNestedPragma: unexpected token" ++ (show lt'))

    {-
    Note [Nested comment line pragmas]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    We used to ignore cpp-preprocessor-generated #line pragmas if they were inside
    nested comments.

    Now, when parsing a nested comment, if we encounter a line starting with '#' we
    call parseNestedPragma, which executes the following:
    1. Save the current lexer input (loc, buf) for later
    2. Set the current lexer input to the beginning of the line starting with '#'
    3. Turn the 'InNestedComment' extension on
    4. Push the 'bol' lexer state
    5. Lex a token. Due to (2), (3), and (4), this should always lex a single line
       or less and return the ITcomment_line_prag token. This may set source line
       and file location if a #line pragma is successfully parsed
    6. Restore lexer input and state to what they were before we did all this
    7. Return control to the function parsing a nested comment, informing it of
       what the lexer parsed

    Regarding (5) above:
    Every exit from the 'bol' lexer state (do_bol, popLinePrag1, failLinePrag1)
    checks if the 'InNestedComment' extension is set. If it is, that function will
    return control to parseNestedPragma by returning the ITcomment_line_prag token.

    See #314 for more background on the bug this fixes.
    -}

    withLexedDocType :: (AlexInput -> (String -> (HdkComment, Token)) -> Bool -> P (PsLocated Token))
                     -> P (PsLocated Token)
    withLexedDocType lexDocComment = do
      input@(AI _ buf) <- getInput
      l <- getLastLocComment
      case prevChar buf ' ' of
        -- The `Bool` argument to lexDocComment signals whether or not the next
        -- line of input might also belong to this doc comment.
        '|' -> lexDocComment input (mkHdkCommentNext l) True
        '^' -> lexDocComment input (mkHdkCommentPrev l) True
        '$' -> lexDocComment input (mkHdkCommentNamed l) True
        '*' -> lexDocSection l 1 input
        _ -> panic "withLexedDocType: Bad doc type"
     where
        lexDocSection l n input = case alexGetChar' input of
          Just ('*', input) -> lexDocSection l (n+1) input
          Just (_,   _)     -> lexDocComment input (mkHdkCommentSection l n) False
          Nothing -> do setInput input; lexToken -- eof reached, lex it normally

    mkHdkCommentNext, mkHdkCommentPrev :: PsSpan -> String -> (HdkComment, Token)
    mkHdkCommentNext loc str = (HdkCommentNext (mkHsDocString str), ITdocCommentNext str loc)
    mkHdkCommentPrev loc str = (HdkCommentPrev (mkHsDocString str), ITdocCommentPrev str loc)

    mkHdkCommentNamed :: PsSpan -> String -> (HdkComment, Token)
    mkHdkCommentNamed loc str =
      let (name, rest) = break isSpace str
      in (HdkCommentNamed name (mkHsDocString rest), ITdocCommentNamed str loc)

    mkHdkCommentSection :: PsSpan -> Int -> String -> (HdkComment, Token)
    mkHdkCommentSection loc n str =
      (HdkCommentSection n (mkHsDocString str), ITdocSection n str loc)

    -- RULES pragmas turn on the forall and '.' keywords, and we turn them
    -- off again at the end of the pragma.
    rulePrag :: Action
    rulePrag span buf len = do
      setExts (.|. xbit InRulePragBit)
      let !src = lexemeToString buf len
      return (L span (ITrules_prag (SourceText src)))

    -- When 'UsePosPragsBit' is not set, it is expected that we emit a token instead
    -- of updating the position in 'PState'
    linePrag :: Action
    linePrag span buf len = do
      usePosPrags <- getBit UsePosPragsBit
      if usePosPrags
        then begin line_prag2 span buf len
        else let !src = lexemeToString buf len
             in return (L span (ITline_prag (SourceText src)))

    -- When 'UsePosPragsBit' is not set, it is expected that we emit a token instead
    -- of updating the position in 'PState'
    columnPrag :: Action
    columnPrag span buf len = do
      usePosPrags <- getBit UsePosPragsBit
      let !src = lexemeToString buf len
      if usePosPrags
        then begin column_prag span buf len
        else let !src = lexemeToString buf len
             in return (L span (ITcolumn_prag (SourceText src)))

    endPrag :: Action
    endPrag span _buf _len = do
      setExts (.&. complement (xbit InRulePragBit))
      return (L span ITclose_prag)

    -- docCommentEnd
    -------------------------------------------------------------------------------
    -- This function is quite tricky. We can't just return a new token, we also
    -- need to update the state of the parser. Why? Because the token is longer
    -- than what was lexed by Alex, and the lexToken function doesn't know this, so
    -- it writes the wrong token length to the parser state. This function is
    -- called afterwards, so it can just update the state.

    commentEnd :: P (PsLocated Token)
               -> AlexInput
               -> String
               -> (String -> (Maybe HdkComment, Token))
               -> StringBuffer
               -> PsSpan
               -> P (PsLocated Token)
    commentEnd cont input commentAcc finalizeComment buf span = do
      setInput input
      let (AI loc nextBuf) = input
          comment = reverse commentAcc
          span' = mkPsSpan (psSpanStart span) loc
          last_len = byteDiff buf nextBuf
      span `seq` setLastToken span' last_len
      let (m_hdk_comment, hdk_token) = finalizeComment comment
      whenIsJust m_hdk_comment $ \hdk_comment ->
        P $ \s -> POk (s {hdk_comments = hdk_comments s `snocOL` L span' hdk_comment}) ()
      b <- getBit RawTokenStreamBit
      if b then return (L span' hdk_token)
           else cont

    docCommentEnd :: AlexInput -> String -> (String -> (HdkComment, Token)) -> StringBuffer ->
                     PsSpan -> P (PsLocated Token)
    docCommentEnd input commentAcc docType buf span = do
      let finalizeComment str =
            let (hdk_comment, token) = docType str
            in (Just hdk_comment, token)
      commentEnd lexToken input commentAcc finalizeComment buf span

    errBrace :: AlexInput -> RealSrcSpan -> P a
    errBrace (AI end _) span = failLocMsgP (realSrcSpanStart span) (psRealLoc end) (PsError (PsErrLexer LexUnterminatedComment LexErrKind_EOF) [])

    open_brace, close_brace :: Action
    open_brace span _str _len = do
      ctx <- getContext
      setContext (NoLayout:ctx)
      return (L span ITocurly)
    close_brace span _str _len = do
      popContext
      return (L span ITccurly)

    qvarid, qconid :: StringBuffer -> Int -> Token
    qvarid buf len = ITqvarid $! splitQualName buf len False
    qconid buf len = ITqconid $! splitQualName buf len False

    splitQualName :: StringBuffer -> Int -> Bool -> (FastString,FastString)
    -- takes a StringBuffer and a length, and returns the module name
    -- and identifier parts of a qualified name.  Splits at the *last* dot,
    -- because of hierarchical module names.
    --
    -- Throws an error if the name is not qualified.
    splitQualName orig_buf len parens = split orig_buf orig_buf
      where
        split buf dot_buf
            | orig_buf `byteDiff` buf >= len  = done dot_buf
            | c == '.'                        = found_dot buf'
            | otherwise                       = split buf' dot_buf
          where
           (c,buf') = nextChar buf

        -- careful, we might get names like M....
        -- so, if the character after the dot is not upper-case, this is
        -- the end of the qualifier part.
        found_dot buf -- buf points after the '.'
            | isUpper c    = split buf' buf
            | otherwise    = done buf
          where
           (c,buf') = nextChar buf

        done dot_buf
            | qual_size < 1 = error "splitQualName got an unqualified named"
            | otherwise =
            (lexemeToFastString orig_buf (qual_size - 1),
             if parens -- Prelude.(+)
                then lexemeToFastString (stepOn dot_buf) (len - qual_size - 2)
                else lexemeToFastString dot_buf (len - qual_size))
          where
            qual_size = orig_buf `byteDiff` dot_buf

    varid :: Action
    varid span buf len =
      case lookupUFM reservedWordsFM fs of
        Just (ITcase, _) -> do
          lastTk <- getLastTk
          keyword <- case lastTk of
            Just (L _ ITlam) -> do
              lambdaCase <- getBit LambdaCaseBit
              unless lambdaCase $ do
                pState <- getPState
                addError $ PsError PsErrLambdaCase [] (mkSrcSpanPs (last_loc pState))
              return ITlcase
            _ -> return ITcase
          maybe_layout keyword
          return $ L span keyword
        Just (keyword, 0) -> do
          maybe_layout keyword
          return $ L span keyword
        Just (keyword, i) -> do
          exts <- getExts
          if exts .&. i /= 0
            then do
              maybe_layout keyword
              return $ L span keyword
            else
              return $ L span $ ITvarid fs
        Nothing ->
          return $ L span $ ITvarid fs
      where
        !fs = lexemeToFastString buf len

    conid :: StringBuffer -> Int -> Token
    conid buf len = ITconid $! lexemeToFastString buf len

    qvarsym, qconsym :: StringBuffer -> Int -> Token
    qvarsym buf len = ITqvarsym $! splitQualName buf len False
    qconsym buf len = ITqconsym $! splitQualName buf len False

    -- See Note [Whitespace-sensitive operator parsing]
    varsym_prefix :: Action
    varsym_prefix = sym $ \span exts s ->
      let warnExtConflict errtok =
            do { addWarning Opt_WarnOperatorWhitespaceExtConflict $
                   PsWarnOperatorWhitespaceExtConflict (mkSrcSpanPs span) errtok
               ; return (ITvarsym s) }
      in
      if | s == fsLit "@" ->
             return ITtypeApp  -- regardless of TypeApplications for better error messages
         | s == fsLit "%" ->
             if xtest LinearTypesBit exts
             then return ITpercent
             else warnExtConflict OperatorWhitespaceSymbol_PrefixPercent
         | s == fsLit "$" ->
             if xtest ThQuotesBit exts
             then return ITdollar
             else warnExtConflict OperatorWhitespaceSymbol_PrefixDollar
         | s == fsLit "$$" ->
             if xtest ThQuotesBit exts
             then return ITdollardollar
             else warnExtConflict OperatorWhitespaceSymbol_PrefixDollarDollar
         | s == fsLit "-" ->
             return ITprefixminus -- Only when LexicalNegation is on, otherwise we get ITminus
                                  -- and don't hit this code path. See Note [Minus tokens]
         | s == fsLit ".", OverloadedRecordDotBit `xtest` exts ->
             return (ITproj True) -- e.g. '(.x)'
         | s == fsLit "." -> return ITdot
         | s == fsLit "!" -> return ITbang
         | s == fsLit "~" -> return ITtilde
         | otherwise ->
             do { addWarning Opt_WarnOperatorWhitespace $
                    PsWarnOperatorWhitespace (mkSrcSpanPs span) s
                      OperatorWhitespaceOccurrence_Prefix
                ; return (ITvarsym s) }

    -- See Note [Whitespace-sensitive operator parsing]
    varsym_suffix :: Action
    varsym_suffix = sym $ \span _ s ->
      if | s == fsLit "@" -> failMsgP (PsError PsErrSuffixAT [])
         | s == fsLit "." -> return ITdot
         | otherwise ->
             do { addWarning Opt_WarnOperatorWhitespace $
                    PsWarnOperatorWhitespace (mkSrcSpanPs span) s
                      OperatorWhitespaceOccurrence_Suffix
                ; return (ITvarsym s) }

    -- See Note [Whitespace-sensitive operator parsing]
    varsym_tight_infix :: Action
    varsym_tight_infix = sym $ \span exts s ->
      if | s == fsLit "@" -> return ITat
         | s == fsLit ".", OverloadedRecordDotBit `xtest` exts  -> return (ITproj False)
         | s == fsLit "." -> return ITdot
         | otherwise ->
             do { addWarning Opt_WarnOperatorWhitespace $
                    PsWarnOperatorWhitespace (mkSrcSpanPs span) s
                      OperatorWhitespaceOccurrence_TightInfix
                ;  return (ITvarsym s) }

    -- See Note [Whitespace-sensitive operator parsing]
    varsym_loose_infix :: Action
    varsym_loose_infix = sym $ \_ _ s ->
      if | s == fsLit "."
         -> return ITdot
         | otherwise
         -> return $ ITvarsym s

    consym :: Action
    consym = sym (\_span _exts s -> return $ ITconsym s)

    sym :: (PsSpan -> ExtsBitmap -> FastString -> P Token) -> Action
    sym con span buf len =
      case lookupUFM reservedSymsFM fs of
        Just (keyword, NormalSyntax, 0) -> do
          exts <- getExts
          if fs == fsLit "." &&
             exts .&. (xbit OverloadedRecordDotBit) /= 0 &&
             xtest OverloadedRecordDotBit exts
          then L span <$!> con span exts fs  -- Process by varsym_*.
          else return $ L span keyword
        Just (keyword, NormalSyntax, i) -> do
          exts <- getExts
          if exts .&. i /= 0
            then return $ L span keyword
            else L span <$!> con span exts fs
        Just (keyword, UnicodeSyntax, 0) -> do
          exts <- getExts
          if xtest UnicodeSyntaxBit exts
            then return $ L span keyword
            else L span <$!> con span exts fs
        Just (keyword, UnicodeSyntax, i) -> do
          exts <- getExts
          if exts .&. i /= 0 && xtest UnicodeSyntaxBit exts
            then return $ L span keyword
            else L span <$!> con span exts fs
        Nothing -> do
          exts <- getExts
          L span <$!> con span exts fs
      where
        !fs = lexemeToFastString buf len

    -- Variations on the integral numeric literal.
    tok_integral :: (SourceText -> Integer -> Token)
                 -> (Integer -> Integer)
                 -> Int -> Int
                 -> (Integer, (Char -> Int))
                 -> Action
    tok_integral itint transint transbuf translen (radix,char_to_int) span buf len = do
      numericUnderscores <- getBit NumericUnderscoresBit  -- #14473
      let src = lexemeToString buf len
      when ((not numericUnderscores) && ('_' `elem` src)) $ do
        pState <- getPState
        addError $ PsError (PsErrNumUnderscores NumUnderscore_Integral) [] (mkSrcSpanPs (last_loc pState))
      return $ L span $ itint (SourceText src)
           $! transint $ parseUnsignedInteger
           (offsetBytes transbuf buf) (subtract translen len) radix char_to_int

    tok_num :: (Integer -> Integer)
            -> Int -> Int
            -> (Integer, (Char->Int)) -> Action
    tok_num = tok_integral $ \case
        st@(SourceText ('-':_)) -> itint st (const True)
        st@(SourceText _)       -> itint st (const False)
        st@NoSourceText         -> itint st (< 0)
      where
        itint :: SourceText -> (Integer -> Bool) -> Integer -> Token
        itint !st is_negative !val = ITinteger ((IL st $! is_negative val) val)

    tok_primint :: (Integer -> Integer)
                -> Int -> Int
                -> (Integer, (Char->Int)) -> Action
    tok_primint = tok_integral ITprimint

    tok_primword :: Int -> Int
                 -> (Integer, (Char->Int)) -> Action
    tok_primword = tok_integral ITprimword positive
    positive, negative :: (Integer -> Integer)
    positive = id
    negative = negate
    decimal, octal, hexadecimal :: (Integer, Char -> Int)
    decimal = (10,octDecDigit)
    binary = (2,octDecDigit)
    octal = (8,octDecDigit)
    hexadecimal = (16,hexDigit)

    -- readSignificandExponentPair can understand negative rationals, exponents, everything.
    tok_frac :: Int -> (String -> Token) -> Action
    tok_frac drop f span buf len = do
      numericUnderscores <- getBit NumericUnderscoresBit  -- #14473
      let src = lexemeToString buf (len-drop)
      when ((not numericUnderscores) && ('_' `elem` src)) $ do
        pState <- getPState
        addError $ PsError (PsErrNumUnderscores NumUnderscore_Float) [] (mkSrcSpanPs (last_loc pState))
      return (L span $! (f $! src))

    tok_float, tok_primfloat, tok_primdouble :: String -> Token
    tok_float        str = ITrational   $! readFractionalLit str
    tok_hex_float    str = ITrational   $! readHexFractionalLit str
    tok_primfloat    str = ITprimfloat  $! readFractionalLit str
    tok_primdouble   str = ITprimdouble $! readFractionalLit str

    readFractionalLit, readHexFractionalLit :: String -> FractionalLit
    readHexFractionalLit = readFractionalLitX readHexSignificandExponentPair Base2
    readFractionalLit = readFractionalLitX readSignificandExponentPair Base10

    readFractionalLitX :: (String -> (Integer, Integer))
                       -> FractionalExponentBase
                       -> String -> FractionalLit
    readFractionalLitX readStr b str =
      mkSourceFractionalLit str is_neg i e b
      where
        is_neg = case str of
                        '-' : _ -> True
                        _      -> False
        (i, e) = readStr str

    -- -----------------------------------------------------------------------------
    -- Layout processing

    -- we're at the first token on a line, insert layout tokens if necessary
    do_bol :: Action
    do_bol span _str _len = do
            -- See Note [Nested comment line pragmas]
            b <- getBit InNestedCommentBit
            if b then return (L span ITcomment_line_prag) else do
              (pos, gen_semic) <- getOffside
              case pos of
                  LT -> do
                      --trace "layout: inserting '}'" $ do
                      popContext
                      -- do NOT pop the lex state, we might have a ';' to insert
                      return (L span ITvccurly)
                  EQ | gen_semic -> do
                      --trace "layout: inserting ';'" $ do
                      _ <- popLexState
                      return (L span ITsemi)
                  _ -> do
                      _ <- popLexState
                      lexToken

    -- certain keywords put us in the "layout" state, where we might
    -- add an opening curly brace.
    maybe_layout :: Token -> P ()
    maybe_layout t = do -- If the alternative layout rule is enabled then
                        -- we never create an implicit layout context here.
                        -- Layout is handled XXX instead.
                        -- The code for closing implicit contexts, or
                        -- inserting implicit semi-colons, is therefore
                        -- irrelevant as it only applies in an implicit
                        -- context.
                        alr <- getBit AlternativeLayoutRuleBit
                        unless alr $ f t
        where f (ITdo _)    = pushLexState layout_do
              f (ITmdo _)   = pushLexState layout_do
              f ITof        = pushLexState layout
              f ITlcase     = pushLexState layout
              f ITlet       = pushLexState layout
              f ITwhere     = pushLexState layout
              f ITrec       = pushLexState layout
              f ITif        = pushLexState layout_if
              f _           = return ()

    -- Pushing a new implicit layout context.  If the indentation of the
    -- next token is not greater than the previous layout context, then
    -- Haskell 98 says that the new layout context should be empty; that is
    -- the lexer must generate {}.
    --
    -- We are slightly more lenient than this: when the new context is started
    -- by a 'do', then we allow the new context to be at the same indentation as
    -- the previous context.  This is what the 'strict' argument is for.
    new_layout_context :: Bool -> Bool -> Token -> Action
    new_layout_context strict gen_semic tok span _buf len = do
        _ <- popLexState
        (AI l _) <- getInput
        let offset = srcLocCol (psRealLoc l) - len
        ctx <- getContext
        nondecreasing <- getBit NondecreasingIndentationBit
        let strict' = strict || not nondecreasing
        case ctx of
            Layout prev_off _ : _  |
               (strict'     && prev_off >= offset  ||
                not strict' && prev_off > offset) -> do
                    -- token is indented to the left of the previous context.
                    -- we must generate a {} sequence now.
                    pushLexState layout_left
                    return (L span tok)
            _ -> do setContext (Layout offset gen_semic : ctx)
                    return (L span tok)

    do_layout_left :: Action
    do_layout_left span _buf _len = do
        _ <- popLexState
        pushLexState bol  -- we must be at the start of a line
        return (L span ITvccurly)

    -- -----------------------------------------------------------------------------
    -- LINE pragmas

    setLineAndFile :: Int -> Action
    setLineAndFile code (PsSpan span _) buf len = do
      let src = lexemeToString buf (len - 1)  -- drop trailing quotation mark
          linenumLen = length $ head $ words src
          linenum = parseUnsignedInteger buf linenumLen 10 octDecDigit
          file = mkFastString $ go $ drop 1 $ dropWhile (/= '"') src
              -- skip everything through first quotation mark to get to the filename
            where go ('\\':c:cs) = c : go cs
                  go (c:cs)      = c : go cs
                  go []          = []
                  -- decode escapes in the filename.  e.g. on Windows
                  -- when our filenames have backslashes in, gcc seems to
                  -- escape the backslashes.  One symptom of not doing this
                  -- is that filenames in error messages look a bit strange:
                  --   C:\\foo\bar.hs
                  -- only the first backslash is doubled, because we apply
                  -- System.FilePath.normalise before printing out
                  -- filenames and it does not remove duplicate
                  -- backslashes after the drive letter (should it?).
      resetAlrLastLoc file
      setSrcLoc (mkRealSrcLoc file (fromIntegral linenum - 1) (srcSpanEndCol span))
          -- subtract one: the line number refers to the *following* line
      addSrcFile file
      _ <- popLexState
      pushLexState code
      lexToken

    setColumn :: Action
    setColumn (PsSpan span _) buf len = do
      let column =
            case reads (lexemeToString buf len) of
              [(column, _)] -> column
              _ -> error "setColumn: expected integer" -- shouldn't happen
      setSrcLoc (mkRealSrcLoc (srcSpanFile span) (srcSpanEndLine span)
                              (fromIntegral (column :: Integer)))
      _ <- popLexState
      lexToken

    alrInitialLoc :: FastString -> RealSrcSpan
    alrInitialLoc file = mkRealSrcSpan loc loc
        where -- This is a hack to ensure that the first line in a file
              -- looks like it is after the initial location:
              loc = mkRealSrcLoc file (-1) (-1)

    -- -----------------------------------------------------------------------------
    -- Options, includes and language pragmas.

    lex_string_prag :: (String -> Token) -> Action
    lex_string_prag mkTok = lex_string_prag_comment mkTok'
      where
        mkTok' s _ = mkTok s

    lex_string_prag_comment :: (String -> PsSpan -> Token) -> Action
    lex_string_prag_comment mkTok span _buf _len
        = do input <- getInput
             start <- getParsedLoc
             l <- getLastLocComment
             tok <- go l [] input
             end <- getParsedLoc
             return (L (mkPsSpan start end) tok)
        where go l acc input
                  = if isString input "#-}"
                       then do setInput input
                               return (mkTok (reverse acc) l)
                       else case alexGetChar input of
                              Just (c,i) -> go l (c:acc) i
                              Nothing -> err input
              isString _ [] = True
              isString i (x:xs)
                  = case alexGetChar i of
                      Just (c,i') | c == x    -> isString i' xs
                      _other -> False
              err (AI end _) = failLocMsgP (realSrcSpanStart (psRealSpan span)) (psRealLoc end) (PsError (PsErrLexer LexUnterminatedOptions LexErrKind_EOF) [])

    -- -----------------------------------------------------------------------------
    -- Strings & Chars

    -- This stuff is horrible.  I hates it.

    lex_string_tok :: Action
    lex_string_tok span buf _len = do
      tok <- lex_string ""
      (AI end bufEnd) <- getInput
      let
        tok' = case tok of
                ITprimstring _ bs -> ITprimstring (SourceText src) bs
                ITstring _ s -> ITstring (SourceText src) s
                _ -> panic "lex_string_tok"
        src = lexemeToString buf (cur bufEnd - cur buf)
      return (L (mkPsSpan (psSpanStart span) end) tok')

    lex_string :: String -> P Token
    lex_string s = do
      i <- getInput
      case alexGetChar' i of
        Nothing -> lit_error i

        Just ('"',i)  -> do
            setInput i
            let s' = reverse s
            magicHash <- getBit MagicHashBit
            if magicHash
              then do
                i <- getInput
                case alexGetChar' i of
                  Just ('#',i) -> do
                    setInput i
                    when (any (> '\xFF') s') $ do
                      pState <- getPState
                      let err = PsError PsErrPrimStringInvalidChar [] (mkSrcSpanPs (last_loc pState))
                      addError err
                    return (ITprimstring (SourceText s') (unsafeMkByteString s'))
                  _other ->
                    return (ITstring (SourceText s') (mkFastString s'))
              else
                    return (ITstring (SourceText s') (mkFastString s'))

        Just ('\\',i)
            | Just ('&',i) <- next -> do
                    setInput i; lex_string s
            | Just (c,i) <- next, c <= '\x7f' && is_space c -> do
                               -- is_space only works for <= '\x7f' (#3751, #5425)
                    setInput i; lex_stringgap s
            where next = alexGetChar' i

        Just (c, i1) -> do
            case c of
              '\\' -> do setInput i1; c' <- lex_escape; lex_string (c':s)
              c | isAny c -> do setInput i1; lex_string (c:s)
              _other -> lit_error i

    lex_stringgap :: String -> P Token
    lex_stringgap s = do
      i <- getInput
      c <- getCharOrFail i
      case c of
        '\\' -> lex_string s
        c | c <= '\x7f' && is_space c -> lex_stringgap s
                               -- is_space only works for <= '\x7f' (#3751, #5425)
        _other -> lit_error i

    lex_char_tok :: Action
    -- Here we are basically parsing character literals, such as 'x' or '\n'
    -- but we additionally spot 'x and ''T, returning ITsimpleQuote and
    -- ITtyQuote respectively, but WITHOUT CONSUMING the x or T part
    -- (the parser does that).
    -- So we have to do two characters of lookahead: when we see 'x we need to
    -- see if there's a trailing quote
    lex_char_tok span buf _len = do        -- We've seen '
       i1 <- getInput       -- Look ahead to first character
       let loc = psSpanStart span
       case alexGetChar' i1 of
            Nothing -> lit_error  i1

            Just ('\'', i2@(AI end2 _)) -> do       -- We've seen ''
                       setInput i2
                       return (L (mkPsSpan loc end2)  ITtyQuote)

            Just ('\\', i2@(AI _end2 _)) -> do      -- We've seen 'backslash
                      setInput i2
                      lit_ch <- lex_escape
                      i3 <- getInput
                      mc <- getCharOrFail i3 -- Trailing quote
                      if mc == '\'' then finish_char_tok buf loc lit_ch
                                    else lit_error i3

            Just (c, i2@(AI _end2 _))
                    | not (isAny c) -> lit_error i1
                    | otherwise ->

                    -- We've seen 'x, where x is a valid character
                    --  (i.e. not newline etc) but not a quote or backslash
               case alexGetChar' i2 of      -- Look ahead one more character
                    Just ('\'', i3) -> do   -- We've seen 'x'
                            setInput i3
                            finish_char_tok buf loc c
                    _other -> do            -- We've seen 'x not followed by quote
                                            -- (including the possibility of EOF)
                                            -- Just parse the quote only
                            let (AI end _) = i1
                            return (L (mkPsSpan loc end) ITsimpleQuote)

    finish_char_tok :: StringBuffer -> PsLoc -> Char -> P (PsLocated Token)
    finish_char_tok buf loc ch  -- We've already seen the closing quote
                            -- Just need to check for trailing #
      = do  magicHash <- getBit MagicHashBit
            i@(AI end bufEnd) <- getInput
            let src = lexemeToString buf (cur bufEnd - cur buf)
            if magicHash then do
                case alexGetChar' i of
                  Just ('#',i@(AI end _)) -> do
                    setInput i
                    return (L (mkPsSpan loc end)
                              (ITprimchar (SourceText src) ch))
                  _other ->
                    return (L (mkPsSpan loc end)
                              (ITchar (SourceText src) ch))
                else do
                  return (L (mkPsSpan loc end) (ITchar (SourceText src) ch))

    isAny :: Char -> Bool
    isAny c | c > '\x7f' = isPrint c
            | otherwise  = is_any c

    lex_escape :: P Char
    lex_escape = do
      i0 <- getInput
      c <- getCharOrFail i0
      case c of
            'a'   -> return '\a'
            'b'   -> return '\b'
            'f'   -> return '\f'
            'n'   -> return '\n'
            'r'   -> return '\r'
            't'   -> return '\t'
            'v'   -> return '\v'
            '\\'  -> return '\\'
            '"'   -> return '\"'
            '\''  -> return '\''
            '^'   -> do i1 <- getInput
                        c <- getCharOrFail i1
                        if c >= '@' && c <= '_'
                            then return (chr (ord c - ord '@'))
                            else lit_error i1

            'x'   -> readNum is_hexdigit 16 hexDigit
            'o'   -> readNum is_octdigit  8 octDecDigit
            x | is_decdigit x -> readNum2 is_decdigit 10 octDecDigit (octDecDigit x)

            c1 ->  do
               i <- getInput
               case alexGetChar' i of
                Nothing -> lit_error i0
                Just (c2,i2) ->
                  case alexGetChar' i2 of
                    Nothing -> do lit_error i0
                    Just (c3,i3) ->
                       let str = [c1,c2,c3] in
                       case [ (c,rest) | (p,c) <- silly_escape_chars,
                                         Just rest <- [stripPrefix p str] ] of
                              (escape_char,[]):_ -> do
                                    setInput i3
                                    return escape_char
                              (escape_char,_:_):_ -> do
                                    setInput i2
                                    return escape_char
                              [] -> lit_error i0

    readNum :: (Char -> Bool) -> Int -> (Char -> Int) -> P Char
    readNum is_digit base conv = do
      i <- getInput
      c <- getCharOrFail i
      if is_digit c
            then readNum2 is_digit base conv (conv c)
            else lit_error i

    readNum2 :: (Char -> Bool) -> Int -> (Char -> Int) -> Int -> P Char
    readNum2 is_digit base conv i = do
      input <- getInput
      read i input
      where read i input = do
              case alexGetChar' input of
                Just (c,input') | is_digit c -> do
                   let i' = i*base + conv c
                   if i' > 0x10ffff
                      then setInput input >> lexError LexNumEscapeRange
                      else read i' input'
                _other -> do
                  setInput input; return (chr i)

    silly_escape_chars :: [(String, Char)]
    silly_escape_chars = [
            ("NUL", '\NUL'),
            ("SOH", '\SOH'),
            ("STX", '\STX'),
            ("ETX", '\ETX'),
            ("EOT", '\EOT'),
            ("ENQ", '\ENQ'),
            ("ACK", '\ACK'),
            ("BEL", '\BEL'),
            ("BS", '\BS'),
            ("HT", '\HT'),
            ("LF", '\LF'),
            ("VT", '\VT'),
            ("FF", '\FF'),
            ("CR", '\CR'),
            ("SO", '\SO'),
            ("SI", '\SI'),
            ("DLE", '\DLE'),
            ("DC1", '\DC1'),
            ("DC2", '\DC2'),
            ("DC3", '\DC3'),
            ("DC4", '\DC4'),
            ("NAK", '\NAK'),
            ("SYN", '\SYN'),
            ("ETB", '\ETB'),
            ("CAN", '\CAN'),
            ("EM", '\EM'),
            ("SUB", '\SUB'),
            ("ESC", '\ESC'),
            ("FS", '\FS'),
            ("GS", '\GS'),
            ("RS", '\RS'),
            ("US", '\US'),
            ("SP", '\SP'),
            ("DEL", '\DEL')
            ]

    -- before calling lit_error, ensure that the current input is pointing to
    -- the position of the error in the buffer.  This is so that we can report
    -- a correct location to the user, but also so we can detect UTF-8 decoding
    -- errors if they occur.
    lit_error :: AlexInput -> P a
    lit_error i = do setInput i; lexError LexStringCharLit

    getCharOrFail :: AlexInput -> P Char
    getCharOrFail i =  do
      case alexGetChar' i of
            Nothing -> lexError LexStringCharLitEOF
            Just (c,i)  -> do setInput i; return c

    -- -----------------------------------------------------------------------------
    -- QuasiQuote

    lex_qquasiquote_tok :: Action
    lex_qquasiquote_tok span buf len = do
      let (qual, quoter) = splitQualName (stepOn buf) (len - 2) False
      quoteStart <- getParsedLoc
      quote <- lex_quasiquote (psRealLoc quoteStart) ""
      end <- getParsedLoc
      return (L (mkPsSpan (psSpanStart span) end)
               (ITqQuasiQuote (qual,
                               quoter,
                               mkFastString (reverse quote),
                               mkPsSpan quoteStart end)))

    lex_quasiquote_tok :: Action
    lex_quasiquote_tok span buf len = do
      let quoter = tail (lexemeToString buf (len - 1))
                    -- 'tail' drops the initial '[',
                    -- while the -1 drops the trailing '|'
      quoteStart <- getParsedLoc
      quote <- lex_quasiquote (psRealLoc quoteStart) ""
      end <- getParsedLoc
      return (L (mkPsSpan (psSpanStart span) end)
               (ITquasiQuote (mkFastString quoter,
                              mkFastString (reverse quote),
                              mkPsSpan quoteStart end)))

    lex_quasiquote :: RealSrcLoc -> String -> P String
    lex_quasiquote start s = do
      i <- getInput
      case alexGetChar' i of
        Nothing -> quasiquote_error start

        -- NB: The string "|]" terminates the quasiquote,
        -- with absolutely no escaping. See the extensive
        -- discussion on #5348 for why there is no
        -- escape handling.
        Just ('|',i)
            | Just (']',i) <- alexGetChar' i
            -> do { setInput i; return s }

        Just (c, i) -> do
             setInput i; lex_quasiquote start (c : s)

    quasiquote_error :: RealSrcLoc -> P a
    quasiquote_error start = do
      (AI end buf) <- getInput
      reportLexError start (psRealLoc end) buf
        (\k -> PsError (PsErrLexer LexUnterminatedQQ k) [])

    -- -----------------------------------------------------------------------------
    -- Warnings

    warnTab :: Action
    warnTab srcspan _buf _len = do
        addTabWarning (psRealSpan srcspan)
        lexToken

    warnThen :: WarningFlag -> (SrcSpan -> PsWarning) -> Action -> Action
    warnThen flag warning action srcspan buf len = do
        addWarning flag (warning (RealSrcSpan (psRealSpan srcspan) Nothing))
        action srcspan buf len

    -- -----------------------------------------------------------------------------
    -- The Parse Monad

    -- | Do we want to generate ';' layout tokens? In some cases we just want to
    -- generate '}', e.g. in MultiWayIf we don't need ';'s because '|' separates
    -- alternatives (unlike a `case` expression where we need ';' to as a separator
    -- between alternatives).
    type GenSemic = Bool

    generateSemic, dontGenerateSemic :: GenSemic
    generateSemic     = True
    dontGenerateSemic = False

    data LayoutContext
      = NoLayout
      | Layout !Int !GenSemic
      deriving Show

    -- | The result of running a parser.
    data ParseResult a
      = POk      -- ^ The parser has consumed a (possibly empty) prefix
                 --   of the input and produced a result. Use 'getMessages'
                 --   to check for accumulated warnings and non-fatal errors.
          PState -- ^ The resulting parsing state. Can be used to resume parsing.
          a      -- ^ The resulting value.
      | PFailed  -- ^ The parser has consumed a (possibly empty) prefix
                 --   of the input and failed.
          PState -- ^ The parsing state right before failure, including the fatal
                 --   parse error. 'getMessages' and 'getErrorMessages' must return
                 --   a non-empty bag of errors.

    -- | Test whether a 'WarningFlag' is set
    warnopt :: WarningFlag -> ParserOpts -> Bool
    warnopt f options = f `EnumSet.member` pWarningFlags options

    -- | Parser options.
    --
    -- See 'mkParserOpts' to construct this.
    data ParserOpts = ParserOpts
      { pWarningFlags   :: EnumSet WarningFlag -- ^ enabled warning flags
      , pExtsBitmap     :: !ExtsBitmap -- ^ bitmap of permitted extensions
      }

    -- | Haddock comment as produced by the lexer. These are accumulated in
    -- 'PState' and then processed in "GHC.Parser.PostProcess.Haddock".
    data HdkComment
      = HdkCommentNext HsDocString
      | HdkCommentPrev HsDocString
      | HdkCommentNamed String HsDocString
      | HdkCommentSection Int HsDocString
      deriving Show

    data PState = PState {
            buffer     :: StringBuffer,
            options    :: ParserOpts,
            warnings   :: Bag PsWarning,
            errors     :: Bag PsError,
            tab_first  :: Maybe RealSrcSpan, -- pos of first tab warning in the file
            tab_count  :: !Word,             -- number of tab warnings in the file
            last_tk    :: Maybe (PsLocated Token), -- last non-comment token
            prev_loc   :: PsSpan,      -- pos of previous token, including comments,
            prev_loc2  :: PsSpan,      -- pos of two back token, including comments,
                                       -- see Note [PsSpan in Comments]
            last_loc   :: PsSpan,      -- pos of current token
            last_len   :: !Int,        -- len of current token
            loc        :: PsLoc,       -- current loc (end of prev token + 1)
            context    :: [LayoutContext],
            lex_state  :: [Int],
            srcfiles   :: [FastString],
            -- Used in the alternative layout rule:
            -- These tokens are the next ones to be sent out. They are
            -- just blindly emitted, without the rule looking at them again:
            alr_pending_implicit_tokens :: [PsLocated Token],
            -- This is the next token to be considered or, if it is Nothing,
            -- we need to get the next token from the input stream:
            alr_next_token :: Maybe (PsLocated Token),
            -- This is what we consider to be the location of the last token
            -- emitted:
            alr_last_loc :: PsSpan,
            -- The stack of layout contexts:
            alr_context :: [ALRContext],
            -- Are we expecting a '{'? If it's Just, then the ALRLayout tells
            -- us what sort of layout the '{' will open:
            alr_expecting_ocurly :: Maybe ALRLayout,
            -- Have we just had the '}' for a let block? If so, than an 'in'
            -- token doesn't need to close anything:
            alr_justClosedExplicitLetBlock :: Bool,

            -- The next three are used to implement Annotations giving the
            -- locations of 'noise' tokens in the source, so that users of
            -- the GHC API can do source to source conversions.
            -- See note [exact print annotations] in GHC.Parser.Annotation
            eof_pos :: Maybe (RealSrcSpan, RealSrcSpan), -- pos, gap to prior token
            header_comments :: Maybe [LEpaComment],
            comment_q :: [LEpaComment],

            -- Haddock comments accumulated in ascending order of their location
            -- (BufPos). We use OrdList to get O(1) snoc.
            --
            -- See Note [Adding Haddock comments to the syntax tree] in GHC.Parser.PostProcess.Haddock
            hdk_comments :: OrdList (PsLocated HdkComment)
         }
            -- last_loc and last_len are used when generating error messages,
            -- and in pushCurrentContext only.  Sigh, if only Happy passed the
            -- current token to happyError, we could at least get rid of last_len.
            -- Getting rid of last_loc would require finding another way to
            -- implement pushCurrentContext (which is only called from one place).

            -- AZ question: setLastToken which sets last_loc and last_len
            -- is called whan processing AlexToken, immediately prior to
            -- calling the action in the token.  So from the perspective
            -- of the action, it is the *current* token.  Do I understand
            -- correctly?

    data ALRContext = ALRNoLayout Bool{- does it contain commas? -}
                                  Bool{- is it a 'let' block? -}
                    | ALRLayout ALRLayout Int
    data ALRLayout = ALRLayoutLet
                   | ALRLayoutWhere
                   | ALRLayoutOf
                   | ALRLayoutDo

    -- | The parsing monad, isomorphic to @StateT PState Maybe@.
    newtype P a = P { unP :: PState -> ParseResult a }

    instance Functor P where
      fmap = liftM

    instance Applicative P where
      pure = returnP
      (<*>) = ap

    instance Monad P where
      (>>=) = thenP

    returnP :: a -> P a
    returnP a = a `seq` (P $ \s -> POk s a)

    thenP :: P a -> (a -> P b) -> P b
    (P m) `thenP` k = P $ \ s ->
            case m s of
                    POk s1 a         -> (unP (k a)) s1
                    PFailed s1 -> PFailed s1

    failMsgP :: (SrcSpan -> PsError) -> P a
    failMsgP f = do
      pState <- getPState
      addFatalError (f (mkSrcSpanPs (last_loc pState)))

    failLocMsgP :: RealSrcLoc -> RealSrcLoc -> (SrcSpan -> PsError) -> P a
    failLocMsgP loc1 loc2 f =
      addFatalError (f (RealSrcSpan (mkRealSrcSpan loc1 loc2) Nothing))

    getPState :: P PState
    getPState = P $ \s -> POk s s

    getExts :: P ExtsBitmap
    getExts = P $ \s -> POk s (pExtsBitmap . options $ s)

    setExts :: (ExtsBitmap -> ExtsBitmap) -> P ()
    setExts f = P $ \s -> POk s {
      options =
        let p = options s
        in  p { pExtsBitmap = f (pExtsBitmap p) }
      } ()

    setSrcLoc :: RealSrcLoc -> P ()
    setSrcLoc new_loc =
      P $ \s@(PState{ loc = PsLoc _ buf_loc }) ->
      POk s{ loc = PsLoc new_loc buf_loc } ()

    getRealSrcLoc :: P RealSrcLoc
    getRealSrcLoc = P $ \s@(PState{ loc=loc }) -> POk s (psRealLoc loc)

    getParsedLoc :: P PsLoc
    getParsedLoc  = P $ \s@(PState{ loc=loc }) -> POk s loc

    addSrcFile :: FastString -> P ()
    addSrcFile f = P $ \s -> POk s{ srcfiles = f : srcfiles s } ()

    setEofPos :: RealSrcSpan -> RealSrcSpan -> P ()
    setEofPos span gap = P $ \s -> POk s{ eof_pos = Just (span, gap) } ()

    setLastToken :: PsSpan -> Int -> P ()
    setLastToken loc len = P $ \s -> POk s {
      last_loc=loc,
      last_len=len
      } ()

    setLastTk :: PsLocated Token -> P ()
    setLastTk tk@(L l _) = P $ \s -> POk s { last_tk = Just tk
                                           , prev_loc = l
                                           , prev_loc2 = prev_loc s} ()

    setLastComment :: PsLocated Token -> P ()
    setLastComment (L l _) = P $ \s -> POk s { prev_loc = l
                                             , prev_loc2 = prev_loc s} ()

    getLastTk :: P (Maybe (PsLocated Token))
    getLastTk = P $ \s@(PState { last_tk = last_tk }) -> POk s last_tk

    -- see Note [PsSpan in Comments]
    getLastLocComment :: P PsSpan
    getLastLocComment = P $ \s@(PState { prev_loc = prev_loc }) -> POk s prev_loc

    -- see Note [PsSpan in Comments]
    getLastLocEof :: P PsSpan
    getLastLocEof = P $ \s@(PState { prev_loc2 = prev_loc2 }) -> POk s prev_loc2

    getLastLoc :: P PsSpan
    getLastLoc = P $ \s@(PState { last_loc = last_loc }) -> POk s last_loc

    data AlexInput = AI !PsLoc !StringBuffer

    {-
    Note [Unicode in Alex]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Although newer versions of Alex support unicode, this grammar is processed with
    the old style '--latin1' behaviour. This means that when implementing the
    functions

        alexGetByte       :: AlexInput -> Maybe (Word8,AlexInput)
        alexInputPrevChar :: AlexInput -> Char

    which Alex uses to take apart our 'AlexInput', we must

      * return a latin1 character in the 'Word8' that 'alexGetByte' expects
      * return a latin1 character in 'alexInputPrevChar'.

    We handle this in 'adjustChar' by squishing entire classes of unicode
    characters into single bytes.
    -}

    {-# INLINE adjustChar #-}
    adjustChar :: Char -> Word8
    adjustChar c = fromIntegral $ ord adj_c
      where non_graphic     = '\x00'
            upper           = '\x01'
            lower           = '\x02'
            digit           = '\x03'
            symbol          = '\x04'
            space           = '\x05'
            other_graphic   = '\x06'
            uniidchar       = '\x07'

            adj_c
              | c <= '\x07' = non_graphic
              | c <= '\x7f' = c
              -- Alex doesn't handle Unicode, so when Unicode
              -- character is encountered we output these values
              -- with the actual character value hidden in the state.
              | otherwise =
                    -- NB: The logic behind these definitions is also reflected
                    -- in "GHC.Utils.Lexeme"
                    -- Any changes here should likely be reflected there.

                    case generalCategory c of
                      UppercaseLetter       -> upper
                      LowercaseLetter       -> lower
                      TitlecaseLetter       -> upper
                      ModifierLetter        -> uniidchar -- see #10196
                      OtherLetter           -> lower -- see #1103
                      NonSpacingMark        -> uniidchar -- see #7650
                      SpacingCombiningMark  -> other_graphic
                      EnclosingMark         -> other_graphic
                      DecimalNumber         -> digit
                      LetterNumber          -> other_graphic
                      OtherNumber           -> digit -- see #4373
                      ConnectorPunctuation  -> symbol
                      DashPunctuation       -> symbol
                      OpenPunctuation       -> other_graphic
                      ClosePunctuation      -> other_graphic
                      InitialQuote          -> other_graphic
                      FinalQuote            -> other_graphic
                      OtherPunctuation      -> symbol
                      MathSymbol            -> symbol
                      CurrencySymbol        -> symbol
                      ModifierSymbol        -> symbol
                      OtherSymbol           -> symbol
                      Space                 -> space
                      _other                -> non_graphic

    -- Getting the previous 'Char' isn't enough here - we need to convert it into
    -- the same format that 'alexGetByte' would have produced.
    --
    -- See Note [Unicode in Alex] and #13986.
    alexInputPrevChar :: AlexInput -> Char
    alexInputPrevChar (AI _ buf) = chr (fromIntegral (adjustChar pc))
      where pc = prevChar buf '\n'

    -- backwards compatibility for Alex 2.x
    alexGetChar :: AlexInput -> Maybe (Char,AlexInput)
    alexGetChar inp = case alexGetByte inp of
                        Nothing    -> Nothing
                        Just (b,i) -> c `seq` Just (c,i)
                           where c = chr $ fromIntegral b

    -- See Note [Unicode in Alex]
    alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)
    alexGetByte (AI loc s)
      | atEnd s   = Nothing
      | otherwise = byte `seq` loc' `seq` s' `seq`
                    --trace (show (ord c)) $
                    Just (byte, (AI loc' s'))
      where (c,s') = nextChar s
            loc'   = advancePsLoc loc c
            byte   = adjustChar c

    -- This version does not squash unicode characters, it is used when
    -- lexing strings.
    alexGetChar' :: AlexInput -> Maybe (Char,AlexInput)
    alexGetChar' (AI loc s)
      | atEnd s   = Nothing
      | otherwise = c `seq` loc' `seq` s' `seq`
                    --trace (show (ord c)) $
                    Just (c, (AI loc' s'))
      where (c,s') = nextChar s
            loc'   = advancePsLoc loc c

    getInput :: P AlexInput
    getInput = P $ \s@PState{ loc=l, buffer=b } -> POk s (AI l b)

    setInput :: AlexInput -> P ()
    setInput (AI l b) = P $ \s -> POk s{ loc=l, buffer=b } ()

    nextIsEOF :: P Bool
    nextIsEOF = do
      AI _ s <- getInput
      return $ atEnd s

    pushLexState :: Int -> P ()
    pushLexState ls = P $ \s@PState{ lex_state=l } -> POk s{lex_state=ls:l} ()

    popLexState :: P Int
    popLexState = P $ \s@PState{ lex_state=ls:l } -> POk s{ lex_state=l } ls

    getLexState :: P Int
    getLexState = P $ \s@PState{ lex_state=ls:_ } -> POk s ls

    popNextToken :: P (Maybe (PsLocated Token))
    popNextToken
        = P $ \s@PState{ alr_next_token = m } ->
                  POk (s {alr_next_token = Nothing}) m

    activeContext :: P Bool
    activeContext = do
      ctxt <- getALRContext
      expc <- getAlrExpectingOCurly
      impt <- implicitTokenPending
      case (ctxt,expc) of
        ([],Nothing) -> return impt
        _other       -> return True

    resetAlrLastLoc :: FastString -> P ()
    resetAlrLastLoc file =
      P $ \s@(PState {alr_last_loc = PsSpan _ buf_span}) ->
      POk s{ alr_last_loc = PsSpan (alrInitialLoc file) buf_span } ()

    setAlrLastLoc :: PsSpan -> P ()
    setAlrLastLoc l = P $ \s -> POk (s {alr_last_loc = l}) ()

    getAlrLastLoc :: P PsSpan
    getAlrLastLoc = P $ \s@(PState {alr_last_loc = l}) -> POk s l

    getALRContext :: P [ALRContext]
    getALRContext = P $ \s@(PState {alr_context = cs}) -> POk s cs

    setALRContext :: [ALRContext] -> P ()
    setALRContext cs = P $ \s -> POk (s {alr_context = cs}) ()

    getJustClosedExplicitLetBlock :: P Bool
    getJustClosedExplicitLetBlock
     = P $ \s@(PState {alr_justClosedExplicitLetBlock = b}) -> POk s b

    setJustClosedExplicitLetBlock :: Bool -> P ()
    setJustClosedExplicitLetBlock b
     = P $ \s -> POk (s {alr_justClosedExplicitLetBlock = b}) ()

    setNextToken :: PsLocated Token -> P ()
    setNextToken t = P $ \s -> POk (s {alr_next_token = Just t}) ()

    implicitTokenPending :: P Bool
    implicitTokenPending
        = P $ \s@PState{ alr_pending_implicit_tokens = ts } ->
                  case ts of
                  [] -> POk s False
                  _  -> POk s True

    popPendingImplicitToken :: P (Maybe (PsLocated Token))
    popPendingImplicitToken
        = P $ \s@PState{ alr_pending_implicit_tokens = ts } ->
                  case ts of
                  [] -> POk s Nothing
                  (t : ts') -> POk (s {alr_pending_implicit_tokens = ts'}) (Just t)

    setPendingImplicitTokens :: [PsLocated Token] -> P ()
    setPendingImplicitTokens ts = P $ \s -> POk (s {alr_pending_implicit_tokens = ts}) ()

    getAlrExpectingOCurly :: P (Maybe ALRLayout)
    getAlrExpectingOCurly = P $ \s@(PState {alr_expecting_ocurly = b}) -> POk s b

    setAlrExpectingOCurly :: Maybe ALRLayout -> P ()
    setAlrExpectingOCurly b = P $ \s -> POk (s {alr_expecting_ocurly = b}) ()

    -- | For reasons of efficiency, boolean parsing flags (eg, language extensions
    -- or whether we are currently in a @RULE@ pragma) are represented by a bitmap
    -- stored in a @Word64@.
    type ExtsBitmap = Word64

    xbit :: ExtBits -> ExtsBitmap
    xbit = bit . fromEnum

    xtest :: ExtBits -> ExtsBitmap -> Bool
    xtest ext xmap = testBit xmap (fromEnum ext)

    xset :: ExtBits -> ExtsBitmap -> ExtsBitmap
    xset ext xmap = setBit xmap (fromEnum ext)

    xunset :: ExtBits -> ExtsBitmap -> ExtsBitmap
    xunset ext xmap = clearBit xmap (fromEnum ext)

    -- | Various boolean flags, mostly language extensions, that impact lexing and
    -- parsing. Note that a handful of these can change during lexing/parsing.
    data ExtBits
      -- Flags that are constant once parsing starts
      = FfiBit
      | InterruptibleFfiBit
      | CApiFfiBit
      | ArrowsBit
      | ThBit
      | ThQuotesBit
      | IpBit
      | OverloadedLabelsBit -- #x overloaded labels
      | ExplicitForallBit -- the 'forall' keyword
      | BangPatBit -- Tells the parser to understand bang-patterns
                   -- (doesn't affect the lexer)
      | PatternSynonymsBit -- pattern synonyms
      | HaddockBit-- Lex and parse Haddock comments
      | MagicHashBit -- "#" in both functions and operators
      | RecursiveDoBit -- mdo
      | QualifiedDoBit -- .do and .mdo
      | UnicodeSyntaxBit -- the forall symbol, arrow symbols, etc
      | UnboxedTuplesBit -- (# and #)
      | UnboxedSumsBit -- (# and #)
      | DatatypeContextsBit
      | MonadComprehensionsBit
      | TransformComprehensionsBit
      | QqBit -- enable quasiquoting
      | RawTokenStreamBit -- producing a token stream with all comments included
      | AlternativeLayoutRuleBit
      | ALRTransitionalBit
      | RelaxedLayoutBit
      | NondecreasingIndentationBit
      | SafeHaskellBit
      | TraditionalRecordSyntaxBit
      | ExplicitNamespacesBit
      | LambdaCaseBit
      | BinaryLiteralsBit
      | NegativeLiteralsBit
      | HexFloatLiteralsBit
      | StaticPointersBit
      | NumericUnderscoresBit
      | StarIsTypeBit
      | BlockArgumentsBit
      | NPlusKPatternsBit
      | DoAndIfThenElseBit
      | MultiWayIfBit
      | GadtSyntaxBit
      | ImportQualifiedPostBit
      | LinearTypesBit
      | NoLexicalNegationBit   -- See Note [Why not LexicalNegationBit]
      | OverloadedRecordDotBit
      | OverloadedRecordUpdateBit

      -- Flags that are updated once parsing starts
      | InRulePragBit
      | InNestedCommentBit -- See Note [Nested comment line pragmas]
      | UsePosPragsBit
        -- ^ If this is enabled, '{-# LINE ... -#}' and '{-# COLUMN ... #-}'
        -- update the internal position. Otherwise, those pragmas are lexed as
        -- tokens of their own.
      deriving Enum

    {-# INLINE mkParserOpts #-}
    mkParserOpts
      :: EnumSet WarningFlag        -- ^ warnings flags enabled
      -> EnumSet LangExt.Extension  -- ^ permitted language extensions enabled
      -> Bool                       -- ^ are safe imports on?
      -> Bool                       -- ^ keeping Haddock comment tokens
      -> Bool                       -- ^ keep regular comment tokens

      -> Bool
      -- ^ If this is enabled, '{-# LINE ... -#}' and '{-# COLUMN ... #-}' update
      -- the internal position kept by the parser. Otherwise, those pragmas are
      -- lexed as 'ITline_prag' and 'ITcolumn_prag' tokens.

      -> ParserOpts
    -- ^ Given exactly the information needed, set up the 'ParserOpts'
    mkParserOpts warningFlags extensionFlags
      safeImports isHaddock rawTokStream usePosPrags =
        ParserOpts {
          pWarningFlags = warningFlags
        , pExtsBitmap   = safeHaskellBit .|. langExtBits .|. optBits
        }
      where
        safeHaskellBit = SafeHaskellBit `setBitIf` safeImports
        langExtBits =
              FfiBit                      `xoptBit` LangExt.ForeignFunctionInterface
          .|. InterruptibleFfiBit         `xoptBit` LangExt.InterruptibleFFI
          .|. CApiFfiBit                  `xoptBit` LangExt.CApiFFI
          .|. ArrowsBit                   `xoptBit` LangExt.Arrows
          .|. ThBit                       `xoptBit` LangExt.TemplateHaskell
          .|. ThQuotesBit                 `xoptBit` LangExt.TemplateHaskellQuotes
          .|. QqBit                       `xoptBit` LangExt.QuasiQuotes
          .|. IpBit                       `xoptBit` LangExt.ImplicitParams
          .|. OverloadedLabelsBit         `xoptBit` LangExt.OverloadedLabels
          .|. ExplicitForallBit           `xoptBit` LangExt.ExplicitForAll
          .|. BangPatBit                  `xoptBit` LangExt.BangPatterns
          .|. MagicHashBit                `xoptBit` LangExt.MagicHash
          .|. RecursiveDoBit              `xoptBit` LangExt.RecursiveDo
          .|. QualifiedDoBit              `xoptBit` LangExt.QualifiedDo
          .|. UnicodeSyntaxBit            `xoptBit` LangExt.UnicodeSyntax
          .|. UnboxedTuplesBit            `xoptBit` LangExt.UnboxedTuples
          .|. UnboxedSumsBit              `xoptBit` LangExt.UnboxedSums
          .|. DatatypeContextsBit         `xoptBit` LangExt.DatatypeContexts
          .|. TransformComprehensionsBit  `xoptBit` LangExt.TransformListComp
          .|. MonadComprehensionsBit      `xoptBit` LangExt.MonadComprehensions
          .|. AlternativeLayoutRuleBit    `xoptBit` LangExt.AlternativeLayoutRule
          .|. ALRTransitionalBit          `xoptBit` LangExt.AlternativeLayoutRuleTransitional
          .|. RelaxedLayoutBit            `xoptBit` LangExt.RelaxedLayout
          .|. NondecreasingIndentationBit `xoptBit` LangExt.NondecreasingIndentation
          .|. TraditionalRecordSyntaxBit  `xoptBit` LangExt.TraditionalRecordSyntax
          .|. ExplicitNamespacesBit       `xoptBit` LangExt.ExplicitNamespaces
          .|. LambdaCaseBit               `xoptBit` LangExt.LambdaCase
          .|. BinaryLiteralsBit           `xoptBit` LangExt.BinaryLiterals
          .|. NegativeLiteralsBit         `xoptBit` LangExt.NegativeLiterals
          .|. HexFloatLiteralsBit         `xoptBit` LangExt.HexFloatLiterals
          .|. PatternSynonymsBit          `xoptBit` LangExt.PatternSynonyms
          .|. StaticPointersBit           `xoptBit` LangExt.StaticPointers
          .|. NumericUnderscoresBit       `xoptBit` LangExt.NumericUnderscores
          .|. StarIsTypeBit               `xoptBit` LangExt.StarIsType
          .|. BlockArgumentsBit           `xoptBit` LangExt.BlockArguments
          .|. NPlusKPatternsBit           `xoptBit` LangExt.NPlusKPatterns
          .|. DoAndIfThenElseBit          `xoptBit` LangExt.DoAndIfThenElse
          .|. MultiWayIfBit               `xoptBit` LangExt.MultiWayIf
          .|. GadtSyntaxBit               `xoptBit` LangExt.GADTSyntax
          .|. ImportQualifiedPostBit      `xoptBit` LangExt.ImportQualifiedPost
          .|. LinearTypesBit              `xoptBit` LangExt.LinearTypes
          .|. NoLexicalNegationBit        `xoptNotBit` LangExt.LexicalNegation -- See Note [Why not LexicalNegationBit]
          .|. OverloadedRecordDotBit      `xoptBit` LangExt.OverloadedRecordDot
          .|. OverloadedRecordUpdateBit   `xoptBit` LangExt.OverloadedRecordUpdate  -- Enable testing via 'getBit OverloadedRecordUpdateBit' in the parser (RecordDotSyntax parsing uses that information).
        optBits =
              HaddockBit        `setBitIf` isHaddock
          .|. RawTokenStreamBit `setBitIf` rawTokStream
          .|. UsePosPragsBit    `setBitIf` usePosPrags

        xoptBit bit ext = bit `setBitIf` EnumSet.member ext extensionFlags
        xoptNotBit bit ext = bit `setBitIf` not (EnumSet.member ext extensionFlags)

        setBitIf :: ExtBits -> Bool -> ExtsBitmap
        b `setBitIf` cond | cond      = xbit b
                          | otherwise = 0

    -- | Set parser options for parsing OPTIONS pragmas
    initPragState :: ParserOpts -> StringBuffer -> RealSrcLoc -> PState
    initPragState options buf loc = (initParserState options buf loc)
       { lex_state = [bol, option_prags, 0]
       }

    -- | Creates a parse state from a 'ParserOpts' value
    initParserState :: ParserOpts -> StringBuffer -> RealSrcLoc -> PState
    initParserState options buf loc =
      PState {
          buffer        = buf,
          options       = options,
          errors        = emptyBag,
          warnings      = emptyBag,
          tab_first     = Nothing,
          tab_count     = 0,
          last_tk       = Nothing,
          prev_loc      = mkPsSpan init_loc init_loc,
          prev_loc2     = mkPsSpan init_loc init_loc,
          last_loc      = mkPsSpan init_loc init_loc,
          last_len      = 0,
          loc           = init_loc,
          context       = [],
          lex_state     = [bol, 0],
          srcfiles      = [],
          alr_pending_implicit_tokens = [],
          alr_next_token = Nothing,
          alr_last_loc = PsSpan (alrInitialLoc (fsLit "<no file>")) (BufSpan (BufPos 0) (BufPos 0)),
          alr_context = [],
          alr_expecting_ocurly = Nothing,
          alr_justClosedExplicitLetBlock = False,
          eof_pos = Nothing,
          header_comments = Nothing,
          comment_q = [],
          hdk_comments = nilOL
        }
      where init_loc = PsLoc loc (BufPos 0)

    -- | An mtl-style class for monads that support parsing-related operations.
    -- For example, sometimes we make a second pass over the parsing results to validate,
    -- disambiguate, or rearrange them, and we do so in the PV monad which cannot consume
    -- input but can report parsing errors, check for extension bits, and accumulate
    -- parsing annotations. Both P and PV are instances of MonadP.
    --
    -- MonadP grants us convenient overloading. The other option is to have separate operations
    -- for each monad: addErrorP vs addErrorPV, getBitP vs getBitPV, and so on.
    --
    class Monad m => MonadP m where
      -- | Add a non-fatal error. Use this when the parser can produce a result
      --   despite the error.
      --
      --   For example, when GHC encounters a @forall@ in a type,
      --   but @-XExplicitForAll@ is disabled, the parser constructs @ForAllTy@
      --   as if @-XExplicitForAll@ was enabled, adding a non-fatal error to
      --   the accumulator.
      --
      --   Control flow wise, non-fatal errors act like warnings: they are added
      --   to the accumulator and parsing continues. This allows GHC to report
      --   more than one parse error per file.
      --
      addError :: PsError -> m ()

      -- | Add a warning to the accumulator.
      --   Use 'getMessages' to get the accumulated warnings.
      addWarning :: WarningFlag -> PsWarning -> m ()

      -- | Add a fatal error. This will be the last error reported by the parser, and
      --   the parser will not produce any result, ending in a 'PFailed' state.
      addFatalError :: PsError -> m a

      -- | Check if a given flag is currently set in the bitmap.
      getBit :: ExtBits -> m Bool
      -- | Go through the @comment_q@ in @PState@ and remove all comments
      -- that belong within the given span
      allocateCommentsP :: RealSrcSpan -> m EpAnnComments
      -- | Go through the @comment_q@ in @PState@ and remove all comments
      -- that come before or within the given span
      allocatePriorCommentsP :: RealSrcSpan -> m EpAnnComments
      -- | Go through the @comment_q@ in @PState@ and remove all comments
      -- that come after the given span
      allocateFinalCommentsP :: RealSrcSpan -> m EpAnnComments

    instance MonadP P where
      addError err
       = P $ \s -> POk s { errors = err `consBag` errors s} ()

      addWarning option w
       = P $ \s -> if warnopt option (options s)
                      then POk (s { warnings = w `consBag` warnings s }) ()
                      else POk s ()

      addFatalError err =
        addError err >> P PFailed

      getBit ext = P $ \s -> let b =  ext `xtest` pExtsBitmap (options s)
                             in b `seq` POk s b
      allocateCommentsP ss = P $ \s ->
        let (comment_q', newAnns) = allocateComments ss (comment_q s) in
          POk s {
             comment_q = comment_q'
           } (EpaComments newAnns)
      allocatePriorCommentsP ss = P $ \s ->
        let (header_comments', comment_q', newAnns)
                 = allocatePriorComments ss (comment_q s) (header_comments s) in
          POk s {
             header_comments = header_comments',
             comment_q = comment_q'
           } (EpaComments newAnns)
      allocateFinalCommentsP ss = P $ \s ->
        let (header_comments', comment_q', newAnns)
                 = allocateFinalComments ss (comment_q s) (header_comments s) in
          POk s {
             header_comments = header_comments',
             comment_q = comment_q'
           } (EpaCommentsBalanced (fromMaybe [] header_comments') (reverse newAnns))

    getCommentsFor :: (MonadP m) => SrcSpan -> m EpAnnComments
    getCommentsFor (RealSrcSpan l _) = allocateCommentsP l
    getCommentsFor _ = return emptyComments

    getPriorCommentsFor :: (MonadP m) => SrcSpan -> m EpAnnComments
    getPriorCommentsFor (RealSrcSpan l _) = allocatePriorCommentsP l
    getPriorCommentsFor _ = return emptyComments

    getFinalCommentsFor :: (MonadP m) => SrcSpan -> m EpAnnComments
    getFinalCommentsFor (RealSrcSpan l _) = allocateFinalCommentsP l
    getFinalCommentsFor _ = return emptyComments

    getEofPos :: P (Maybe (RealSrcSpan, RealSrcSpan))
    getEofPos = P $ \s@(PState { eof_pos = pos }) -> POk s pos

    addTabWarning :: RealSrcSpan -> P ()
    addTabWarning srcspan
     = P $ \s@PState{tab_first=tf, tab_count=tc, options=o} ->
           let tf' = if isJust tf then tf else Just srcspan
               tc' = tc + 1
               s' = if warnopt Opt_WarnTabs o
                    then s{tab_first = tf', tab_count = tc'}
                    else s
           in POk s' ()

    -- | Get a bag of the errors that have been accumulated so far.
    --   Does not take -Werror into account.
    getErrorMessages :: PState -> Bag PsError
    getErrorMessages p = errors p

    -- | Get the warnings and errors accumulated so far.
    --   Does not take -Werror into account.
    getMessages :: PState -> (Bag PsWarning, Bag PsError)
    getMessages p =
      let ws = warnings p
          -- we add the tabulation warning on the fly because
          -- we count the number of occurrences of tab characters
          ws' = case tab_first p of
                   Nothing -> ws
                   Just tf -> PsWarnTab (RealSrcSpan tf Nothing) (tab_count p)
                               `consBag` ws
      in (ws', errors p)

    getContext :: P [LayoutContext]
    getContext = P $ \s@PState{context=ctx} -> POk s ctx

    setContext :: [LayoutContext] -> P ()
    setContext ctx = P $ \s -> POk s{context=ctx} ()

    popContext :: P ()
    popContext = P $ \ s@(PState{ buffer = buf, options = o, context = ctx,
                                  last_len = len, last_loc = last_loc }) ->
      case ctx of
            (_:tl) ->
              POk s{ context = tl } ()
            []     ->
              unP (addFatalError $ srcParseErr o buf len (mkSrcSpanPs last_loc)) s

    -- Push a new layout context at the indentation of the last token read.
    pushCurrentContext :: GenSemic -> P ()
    pushCurrentContext gen_semic = P $ \ s@PState{ last_loc=loc, context=ctx } ->
        POk s{context = Layout (srcSpanStartCol (psRealSpan loc)) gen_semic : ctx} ()

    -- This is only used at the outer level of a module when the 'module' keyword is
    -- missing.
    pushModuleContext :: P ()
    pushModuleContext = pushCurrentContext generateSemic

    getOffside :: P (Ordering, Bool)
    getOffside = P $ \s@PState{last_loc=loc, context=stk} ->
                    let offs = srcSpanStartCol (psRealSpan loc) in
                    let ord = case stk of
                                Layout n gen_semic : _ ->
                                  --trace ("layout: " ++ show n ++ ", offs: " ++ show offs) $
                                  (compare offs n, gen_semic)
                                _ ->
                                  (GT, dontGenerateSemic)
                    in POk s ord

    -- ---------------------------------------------------------------------------
    -- Construct a parse error

    srcParseErr
      :: ParserOpts
      -> StringBuffer       -- current buffer (placed just after the last token)
      -> Int                -- length of the previous token
      -> SrcSpan
      -> PsError
    srcParseErr options buf len loc = PsError (PsErrParse token) suggests loc
      where
       token = lexemeToString (offsetBytes (-len) buf) len
       pattern = decodePrevNChars 8 buf
       last100 = decodePrevNChars 100 buf
       doInLast100 = "do" `isInfixOf` last100
       mdoInLast100 = "mdo" `isInfixOf` last100
       th_enabled = ThQuotesBit `xtest` pExtsBitmap options
       ps_enabled = PatternSynonymsBit `xtest` pExtsBitmap options

       sug c s = if c then Just s else Nothing
       sug_th  = sug (not th_enabled && token == "$")          SuggestTH              -- #7396
       sug_rdo = sug (token == "<-" && mdoInLast100)           SuggestRecursiveDo
       sug_do  = sug (token == "<-" && not mdoInLast100)       SuggestDo
       sug_let = sug (token == "=" && doInLast100)             SuggestLetInDo         -- #15849
       sug_pat = sug (not ps_enabled && pattern == "pattern ") SuggestPatternSynonyms -- #12429
       suggests
             | null token = []
             | otherwise  = catMaybes [sug_th, sug_rdo, sug_do, sug_let, sug_pat]

    -- Report a parse failure, giving the span of the previous token as
    -- the location of the error.  This is the entry point for errors
    -- detected during parsing.
    srcParseFail :: P a
    srcParseFail = P $ \s@PState{ buffer = buf, options = o, last_len = len,
                                last_loc = last_loc } ->
        unP (addFatalError $ srcParseErr o buf len (mkSrcSpanPs last_loc)) s

    -- A lexical error is reported at a particular position in the source file,
    -- not over a token range.
    lexError :: LexErr -> P a
    lexError e = do
      loc <- getRealSrcLoc
      (AI end buf) <- getInput
      reportLexError loc (psRealLoc end) buf
        (\k -> PsError (PsErrLexer e k) [])

    -- -----------------------------------------------------------------------------
    -- This is the top-level function: called from the parser each time a
    -- new token is to be read from the input.

    lexer, lexerDbg :: Bool -> (Located Token -> P a) -> P a

    lexer queueComments cont = do
      alr <- getBit AlternativeLayoutRuleBit
      let lexTokenFun = if alr then lexTokenAlr else lexToken
      (L span tok) <- lexTokenFun
      --trace ("token: " ++ show tok) $ do

      if (queueComments && isComment tok)
        then queueComment (L (psRealSpan span) tok) >> lexer queueComments cont
        else cont (L (mkSrcSpanPs span) tok)

    -- Use this instead of 'lexer' in GHC.Parser to dump the tokens for debugging.
    lexerDbg queueComments cont = lexer queueComments contDbg
      where
        contDbg tok = trace ("token: " ++ show (unLoc tok)) (cont tok)

    lexTokenAlr :: P (PsLocated Token)
    lexTokenAlr = do mPending <- popPendingImplicitToken
                     t <- case mPending of
                          Nothing ->
                              do mNext <- popNextToken
                                 t <- case mNext of
                                      Nothing -> lexToken
                                      Just next -> return next
                                 alternativeLayoutRuleToken t
                          Just t ->
                              return t
                     setAlrLastLoc (getLoc t)
                     case unLoc t of
                         ITwhere  -> setAlrExpectingOCurly (Just ALRLayoutWhere)
                         ITlet    -> setAlrExpectingOCurly (Just ALRLayoutLet)
                         ITof     -> setAlrExpectingOCurly (Just ALRLayoutOf)
                         ITlcase  -> setAlrExpectingOCurly (Just ALRLayoutOf)
                         ITdo  _  -> setAlrExpectingOCurly (Just ALRLayoutDo)
                         ITmdo _  -> setAlrExpectingOCurly (Just ALRLayoutDo)
                         ITrec    -> setAlrExpectingOCurly (Just ALRLayoutDo)
                         _        -> return ()
                     return t

    alternativeLayoutRuleToken :: PsLocated Token -> P (PsLocated Token)
    alternativeLayoutRuleToken t
        = do context <- getALRContext
             lastLoc <- getAlrLastLoc
             mExpectingOCurly <- getAlrExpectingOCurly
             transitional <- getBit ALRTransitionalBit
             justClosedExplicitLetBlock <- getJustClosedExplicitLetBlock
             setJustClosedExplicitLetBlock False
             let thisLoc = getLoc t
                 thisCol = srcSpanStartCol (psRealSpan thisLoc)
                 newLine = srcSpanStartLine (psRealSpan thisLoc) > srcSpanEndLine (psRealSpan lastLoc)
             case (unLoc t, context, mExpectingOCurly) of
                 -- This case handles a GHC extension to the original H98
                 -- layout rule...
                 (ITocurly, _, Just alrLayout) ->
                     do setAlrExpectingOCurly Nothing
                        let isLet = case alrLayout of
                                    ALRLayoutLet -> True
                                    _ -> False
                        setALRContext (ALRNoLayout (containsCommas ITocurly) isLet : context)
                        return t
                 -- ...and makes this case unnecessary
                 {-
                 -- I think our implicit open-curly handling is slightly
                 -- different to John's, in how it interacts with newlines
                 -- and "in"
                 (ITocurly, _, Just _) ->
                     do setAlrExpectingOCurly Nothing
                        setNextToken t
                        lexTokenAlr
                 -}
                 (_, ALRLayout _ col : _ls, Just expectingOCurly)
                  | (thisCol > col) ||
                    (thisCol == col &&
                     isNonDecreasingIndentation expectingOCurly) ->
                     do setAlrExpectingOCurly Nothing
                        setALRContext (ALRLayout expectingOCurly thisCol : context)
                        setNextToken t
                        return (L thisLoc ITvocurly)
                  | otherwise ->
                     do setAlrExpectingOCurly Nothing
                        setPendingImplicitTokens [L lastLoc ITvccurly]
                        setNextToken t
                        return (L lastLoc ITvocurly)
                 (_, _, Just expectingOCurly) ->
                     do setAlrExpectingOCurly Nothing
                        setALRContext (ALRLayout expectingOCurly thisCol : context)
                        setNextToken t
                        return (L thisLoc ITvocurly)
                 -- We do the [] cases earlier than in the spec, as we
                 -- have an actual EOF token
                 (ITeof, ALRLayout _ _ : ls, _) ->
                     do setALRContext ls
                        setNextToken t
                        return (L thisLoc ITvccurly)
                 (ITeof, _, _) ->
                     return t
                 -- the other ITeof case omitted; general case below covers it
                 (ITin, _, _)
                  | justClosedExplicitLetBlock ->
                     return t
                 (ITin, ALRLayout ALRLayoutLet _ : ls, _)
                  | newLine ->
                     do setPendingImplicitTokens [t]
                        setALRContext ls
                        return (L thisLoc ITvccurly)
                 -- This next case is to handle a transitional issue:
                 (ITwhere, ALRLayout _ col : ls, _)
                  | newLine && thisCol == col && transitional ->
                     do addWarning Opt_WarnAlternativeLayoutRuleTransitional
                          $ PsWarnTransitionalLayout (mkSrcSpanPs thisLoc) TransLayout_Where
                        setALRContext ls
                        setNextToken t
                        -- Note that we use lastLoc, as we may need to close
                        -- more layouts, or give a semicolon
                        return (L lastLoc ITvccurly)
                 -- This next case is to handle a transitional issue:
                 (ITvbar, ALRLayout _ col : ls, _)
                  | newLine && thisCol == col && transitional ->
                     do addWarning Opt_WarnAlternativeLayoutRuleTransitional
                          $ PsWarnTransitionalLayout (mkSrcSpanPs thisLoc) TransLayout_Pipe
                        setALRContext ls
                        setNextToken t
                        -- Note that we use lastLoc, as we may need to close
                        -- more layouts, or give a semicolon
                        return (L lastLoc ITvccurly)
                 (_, ALRLayout _ col : ls, _)
                  | newLine && thisCol == col ->
                     do setNextToken t
                        let loc = psSpanStart thisLoc
                            zeroWidthLoc = mkPsSpan loc loc
                        return (L zeroWidthLoc ITsemi)
                  | newLine && thisCol < col ->
                     do setALRContext ls
                        setNextToken t
                        -- Note that we use lastLoc, as we may need to close
                        -- more layouts, or give a semicolon
                        return (L lastLoc ITvccurly)
                 -- We need to handle close before open, as 'then' is both
                 -- an open and a close
                 (u, _, _)
                  | isALRclose u ->
                     case context of
                     ALRLayout _ _ : ls ->
                         do setALRContext ls
                            setNextToken t
                            return (L thisLoc ITvccurly)
                     ALRNoLayout _ isLet : ls ->
                         do let ls' = if isALRopen u
                                         then ALRNoLayout (containsCommas u) False : ls
                                         else ls
                            setALRContext ls'
                            when isLet $ setJustClosedExplicitLetBlock True
                            return t
                     [] ->
                         do let ls = if isALRopen u
                                        then [ALRNoLayout (containsCommas u) False]
                                        else []
                            setALRContext ls
                            -- XXX This is an error in John's code, but
                            -- it looks reachable to me at first glance
                            return t
                 (u, _, _)
                  | isALRopen u ->
                     do setALRContext (ALRNoLayout (containsCommas u) False : context)
                        return t
                 (ITin, ALRLayout ALRLayoutLet _ : ls, _) ->
                     do setALRContext ls
                        setPendingImplicitTokens [t]
                        return (L thisLoc ITvccurly)
                 (ITin, ALRLayout _ _ : ls, _) ->
                     do setALRContext ls
                        setNextToken t
                        return (L thisLoc ITvccurly)
                 -- the other ITin case omitted; general case below covers it
                 (ITcomma, ALRLayout _ _ : ls, _)
                  | topNoLayoutContainsCommas ls ->
                     do setALRContext ls
                        setNextToken t
                        return (L thisLoc ITvccurly)
                 (ITwhere, ALRLayout ALRLayoutDo _ : ls, _) ->
                     do setALRContext ls
                        setPendingImplicitTokens [t]
                        return (L thisLoc ITvccurly)
                 -- the other ITwhere case omitted; general case below covers it
                 (_, _, _) -> return t

    isALRopen :: Token -> Bool
    isALRopen ITcase          = True
    isALRopen ITif            = True
    isALRopen ITthen          = True
    isALRopen IToparen        = True
    isALRopen ITobrack        = True
    isALRopen ITocurly        = True
    -- GHC Extensions:
    isALRopen IToubxparen     = True
    isALRopen _               = False

    isALRclose :: Token -> Bool
    isALRclose ITof     = True
    isALRclose ITthen   = True
    isALRclose ITelse   = True
    isALRclose ITcparen = True
    isALRclose ITcbrack = True
    isALRclose ITccurly = True
    -- GHC Extensions:
    isALRclose ITcubxparen = True
    isALRclose _        = False

    isNonDecreasingIndentation :: ALRLayout -> Bool
    isNonDecreasingIndentation ALRLayoutDo = True
    isNonDecreasingIndentation _           = False

    containsCommas :: Token -> Bool
    containsCommas IToparen = True
    containsCommas ITobrack = True
    -- John doesn't have {} as containing commas, but records contain them,
    -- which caused a problem parsing Cabal's Distribution.Simple.InstallDirs
    -- (defaultInstallDirs).
    containsCommas ITocurly = True
    -- GHC Extensions:
    containsCommas IToubxparen = True
    containsCommas _        = False

    topNoLayoutContainsCommas :: [ALRContext] -> Bool
    topNoLayoutContainsCommas [] = False
    topNoLayoutContainsCommas (ALRLayout _ _ : ls) = topNoLayoutContainsCommas ls
    topNoLayoutContainsCommas (ALRNoLayout b _ : _) = b

    lexToken :: P (PsLocated Token)
    lexToken = do
      inp@(AI loc1 buf) <- getInput
      sc <- getLexState
      exts <- getExts
      case alexScanUser exts inp sc of
        AlexEOF -> do
            let span = mkPsSpan loc1 loc1
            lt <- getLastLocEof
            setEofPos (psRealSpan span) (psRealSpan lt)
            setLastToken span 0
            return (L span ITeof)
        AlexError (AI loc2 buf) ->
            reportLexError (psRealLoc loc1) (psRealLoc loc2) buf
              (\k -> PsError (PsErrLexer LexError k) [])
        AlexSkip inp2 _ -> do
            setInput inp2
            lexToken
        AlexToken inp2@(AI end buf2) _ t -> do
            setInput inp2
            let span = mkPsSpan loc1 end
            let bytes = byteDiff buf buf2
            span `seq` setLastToken span bytes
            lt <- t span buf bytes
            let lt' = unLoc lt
            if (isComment lt') then setLastComment lt else setLastTk lt
            return lt

    reportLexError :: RealSrcLoc -> RealSrcLoc -> StringBuffer -> (LexErrKind -> SrcSpan -> PsError) -> P a
    reportLexError loc1 loc2 buf f
      | atEnd buf = failLocMsgP loc1 loc2 (f LexErrKind_EOF)
      | otherwise =
      let c = fst (nextChar buf)
      in if c == '\0' -- decoding errors are mapped to '\0', see utf8DecodeChar#
         then failLocMsgP loc2 loc2 (f LexErrKind_UTF8)
         else failLocMsgP loc1 loc2 (f (LexErrKind_Char c))

    lexTokenStream :: ParserOpts -> StringBuffer -> RealSrcLoc -> ParseResult [Located Token]
    lexTokenStream opts buf loc = unP go initState{ options = opts' }
        where
        new_exts  = xunset HaddockBit        -- disable Haddock
                    $ xunset UsePosPragsBit  -- parse LINE/COLUMN pragmas as tokens
                    $ xset RawTokenStreamBit -- include comments
                    $ pExtsBitmap opts
        opts'     = opts { pExtsBitmap = new_exts }
        initState = initParserState opts' buf loc
        go = do
          ltok <- lexer False return
          case ltok of
            L _ ITeof -> return []
            _ -> liftM (ltok:) go

    linePrags = Map.singleton "line" linePrag

    fileHeaderPrags = Map.fromList([("options", lex_string_prag IToptions_prag),
                                     ("options_ghc", lex_string_prag IToptions_prag),
                                     ("options_haddock", lex_string_prag_comment ITdocOptions),
                                     ("language", token ITlanguage_prag),
                                     ("include", lex_string_prag ITinclude_prag)])

    ignoredPrags = Map.fromList (map ignored pragmas)
                   where ignored opt = (opt, nested_comment lexToken)
                         impls = ["hugs", "nhc98", "jhc", "yhc", "catch", "derive"]
                         options_pragmas = map ("options_" ++) impls
                         -- CFILES is a hugs-only thing.
                         pragmas = options_pragmas ++ ["cfiles", "contract"]

    oneWordPrags = Map.fromList [
         ("rules", rulePrag),
         ("inline",
             strtoken (\s -> (ITinline_prag (SourceText s) Inline FunLike))),
         ("inlinable",
             strtoken (\s -> (ITinline_prag (SourceText s) Inlinable FunLike))),
         ("inlineable",
             strtoken (\s -> (ITinline_prag (SourceText s) Inlinable FunLike))),
                                        -- Spelling variant
         ("notinline",
             strtoken (\s -> (ITinline_prag (SourceText s) NoInline FunLike))),
         ("specialize", strtoken (\s -> ITspec_prag (SourceText s))),
         ("source", strtoken (\s -> ITsource_prag (SourceText s))),
         ("warning", strtoken (\s -> ITwarning_prag (SourceText s))),
         ("deprecated", strtoken (\s -> ITdeprecated_prag (SourceText s))),
         ("scc", strtoken (\s -> ITscc_prag (SourceText s))),
         ("unpack", strtoken (\s -> ITunpack_prag (SourceText s))),
         ("nounpack", strtoken (\s -> ITnounpack_prag (SourceText s))),
         ("ann", strtoken (\s -> ITann_prag (SourceText s))),
         ("minimal", strtoken (\s -> ITminimal_prag (SourceText s))),
         ("overlaps", strtoken (\s -> IToverlaps_prag (SourceText s))),
         ("overlappable", strtoken (\s -> IToverlappable_prag (SourceText s))),
         ("overlapping", strtoken (\s -> IToverlapping_prag (SourceText s))),
         ("incoherent", strtoken (\s -> ITincoherent_prag (SourceText s))),
         ("ctype", strtoken (\s -> ITctype (SourceText s))),
         ("complete", strtoken (\s -> ITcomplete_prag (SourceText s))),
         ("column", columnPrag)
         ]

    twoWordPrags = Map.fromList [
         ("inline conlike",
             strtoken (\s -> (ITinline_prag (SourceText s) Inline ConLike))),
         ("notinline conlike",
             strtoken (\s -> (ITinline_prag (SourceText s) NoInline ConLike))),
         ("specialize inline",
             strtoken (\s -> (ITspec_inline_prag (SourceText s) True))),
         ("specialize notinline",
             strtoken (\s -> (ITspec_inline_prag (SourceText s) False)))
         ]

    dispatch_pragmas :: Map String Action -> Action
    dispatch_pragmas prags span buf len = case Map.lookup (clean_pragma (lexemeToString buf len)) prags of
                                           Just found -> found span buf len
                                           Nothing -> lexError LexUnknownPragma

    known_pragma :: Map String Action -> AlexAccPred ExtsBitmap
    known_pragma prags _ (AI _ startbuf) _ (AI _ curbuf)
     = isKnown && nextCharIsNot curbuf pragmaNameChar
        where l = lexemeToString startbuf (byteDiff startbuf curbuf)
              isKnown = isJust $ Map.lookup (clean_pragma l) prags
              pragmaNameChar c = isAlphaNum c || c == '_'

    clean_pragma :: String -> String
    clean_pragma prag = canon_ws (map toLower (unprefix prag))
                        where unprefix prag' = case stripPrefix "{-#" prag' of
                                                 Just rest -> rest
                                                 Nothing -> prag'
                              canonical prag' = case prag' of
                                                  "noinline" -> "notinline"
                                                  "specialise" -> "specialize"
                                                  "constructorlike" -> "conlike"
                                                  _ -> prag'
                              canon_ws s = unwords (map canonical (words s))

    {-
    %************************************************************************
    %*                                                                      *
            Helper functions for generating annotations in the parser
    %*                                                                      *
    %************************************************************************
    -}

    -- |Given a 'SrcSpan' that surrounds a 'HsPar' or 'HsParTy', generate
    -- 'AddEpAnn' values for the opening and closing bordering on the start
    -- and end of the span
    mkParensEpAnn :: SrcSpan -> [AddEpAnn]
    mkParensEpAnn (UnhelpfulSpan _)  = []
    mkParensEpAnn (RealSrcSpan ss _) = [AddEpAnn AnnOpenP (EpaSpan lo),AddEpAnn AnnCloseP (EpaSpan lc)]
      where
        f = srcSpanFile ss
        sl = srcSpanStartLine ss
        sc = srcSpanStartCol ss
        el = srcSpanEndLine ss
        ec = srcSpanEndCol ss
        lo = mkRealSrcSpan (realSrcSpanStart ss)        (mkRealSrcLoc f sl (sc+1))
        lc = mkRealSrcSpan (mkRealSrcLoc f el (ec - 1)) (realSrcSpanEnd ss)

    queueComment :: RealLocated Token -> P()
    queueComment c = P $ \s -> POk s {
      comment_q = commentToAnnotation c : comment_q s
      } ()

    allocateComments
      :: RealSrcSpan
      -> [LEpaComment]
      -> ([LEpaComment], [LEpaComment])
    allocateComments ss comment_q =
      let
        (before,rest)  = break (\(L l _) -> isRealSubspanOf (anchor l) ss) comment_q
        (middle,after) = break (\(L l _) -> not (isRealSubspanOf (anchor l) ss)) rest
        comment_q' = before ++ after
        newAnns = middle
      in
        (comment_q', newAnns)

    allocatePriorComments
      :: RealSrcSpan
      -> [LEpaComment]
      -> Maybe [LEpaComment]
      -> (Maybe [LEpaComment], [LEpaComment], [LEpaComment])
    allocatePriorComments ss comment_q mheader_comments =
      let
        cmp (L l _) = anchor l <= ss
        (before,after) = partition cmp comment_q
        newAnns = before
        comment_q'= after
      in
        case mheader_comments of
          Nothing -> (Just newAnns, comment_q', [])
          Just _ -> (mheader_comments, comment_q', newAnns)

    allocateFinalComments
      :: RealSrcSpan
      -> [LEpaComment]
      -> Maybe [LEpaComment]
      -> (Maybe [LEpaComment], [LEpaComment], [LEpaComment])
    allocateFinalComments ss comment_q mheader_comments =
      let
        cmp (L l _) = anchor l <= ss
        (before,after) = partition cmp comment_q
        newAnns = after
        comment_q'= before
      in
        case mheader_comments of
          Nothing -> (Just newAnns,    [], comment_q')
          Just _ -> (mheader_comments, [], comment_q' ++ newAnns)

    commentToAnnotation :: RealLocated Token -> LEpaComment
    commentToAnnotation (L l (ITdocCommentNext s ll))  = mkLEpaComment l ll (EpaDocCommentNext s)
    commentToAnnotation (L l (ITdocCommentPrev s ll))  = mkLEpaComment l ll (EpaDocCommentPrev s)
    commentToAnnotation (L l (ITdocCommentNamed s ll)) = mkLEpaComment l ll (EpaDocCommentNamed s)
    commentToAnnotation (L l (ITdocSection n s ll))    = mkLEpaComment l ll (EpaDocSection n s)
    commentToAnnotation (L l (ITdocOptions s ll))      = mkLEpaComment l ll (EpaDocOptions s)
    commentToAnnotation (L l (ITlineComment s ll))     = mkLEpaComment l ll (EpaLineComment s)
    commentToAnnotation (L l (ITblockComment s ll))    = mkLEpaComment l ll (EpaBlockComment s)
    commentToAnnotation _                           = panic "commentToAnnotation"

    -- see Note [PsSpan in Comments]
    mkLEpaComment :: RealSrcSpan -> PsSpan -> EpaCommentTok -> LEpaComment
    mkLEpaComment l ll tok = L (realSpanAsAnchor l) (EpaComment tok (psRealSpan ll))

    -- ---------------------------------------------------------------------

    isComment :: Token -> Bool
    isComment (ITlineComment     _ _)   = True
    isComment (ITblockComment    _ _)   = True
    isComment (ITdocCommentNext  _ _)   = True
    isComment (ITdocCommentPrev  _ _)   = True
    isComment (ITdocCommentNamed _ _)   = True
    isComment (ITdocSection      _ _ _) = True
    isComment (ITdocOptions      _ _)   = True
    isComment _ = False

    bol,column_prag,layout,layout_do,layout_if,layout_left,line_prag1,line_prag1a,line_prag2,line_prag2a,option_prags :: Int
    bol = 1
    column_prag = 2
    layout = 3
    layout_do = 4
    layout_if = 5
    layout_left = 6
    line_prag1 = 7
    line_prag1a = 8
    line_prag2 = 9
    line_prag2a = 10
    option_prags = 11
    alex_action_1 =  warnTab
    alex_action_2 =  nested_comment lexToken
    alex_action_3 =  lineCommentToken
    alex_action_4 =  lineCommentToken
    alex_action_5 =  lineCommentToken
    alex_action_6 =  lineCommentToken
    alex_action_7 =  lineCommentToken
    alex_action_8 =  lineCommentToken
    alex_action_10 =  begin line_prag1
    alex_action_11 =  begin line_prag1
    alex_action_14 =  do_bol
    alex_action_15 =  hopefully_open_brace
    alex_action_17 =  begin line_prag1
    alex_action_18 =  new_layout_context True dontGenerateSemic ITvbar
    alex_action_19 =  pop
    alex_action_20 =  new_layout_context True  generateSemic ITvocurly
    alex_action_21 =  new_layout_context False generateSemic ITvocurly
    alex_action_22 =  do_layout_left
    alex_action_23 =  begin bol
    alex_action_24 =  dispatch_pragmas linePrags
    alex_action_25 =  setLineAndFile line_prag1a
    alex_action_26 =  failLinePrag1
    alex_action_27 =  popLinePrag1
    alex_action_28 =  setLineAndFile line_prag2a
    alex_action_29 =  pop
    alex_action_30 =  setColumn
    alex_action_31 =  dispatch_pragmas twoWordPrags
    alex_action_32 =  dispatch_pragmas oneWordPrags
    alex_action_33 =  dispatch_pragmas ignoredPrags
    alex_action_34 =  endPrag
    alex_action_35 =  dispatch_pragmas fileHeaderPrags
    alex_action_36 =  nested_comment lexToken
    alex_action_37 =  warnThen Opt_WarnUnrecognisedPragmas PsWarnUnrecognisedPragma
                        (nested_comment lexToken)
    alex_action_38 =  multiline_doc_comment
    alex_action_39 =  nested_doc_comment
    alex_action_40 =  token (ITopenExpQuote NoE NormalSyntax)
    alex_action_41 =  token (ITopenTExpQuote NoE)
    alex_action_42 =  token (ITcloseQuote NormalSyntax)
    alex_action_43 =  token ITcloseTExpQuote
    alex_action_44 =  token (ITopenExpQuote HasE NormalSyntax)
    alex_action_45 =  token (ITopenTExpQuote HasE)
    alex_action_46 =  token ITopenPatQuote
    alex_action_47 =  layout_token ITopenDecQuote
    alex_action_48 =  token ITopenTypQuote
    alex_action_49 =  lex_quasiquote_tok
    alex_action_50 =  lex_qquasiquote_tok
    alex_action_51 =  token (ITopenExpQuote NoE UnicodeSyntax)
    alex_action_52 =  token (ITcloseQuote UnicodeSyntax)
    alex_action_53 =  special (IToparenbar NormalSyntax)
    alex_action_54 =  special (ITcparenbar NormalSyntax)
    alex_action_55 =  special (IToparenbar UnicodeSyntax)
    alex_action_56 =  special (ITcparenbar UnicodeSyntax)
    alex_action_57 =  skip_one_varid ITdupipvarid
    alex_action_58 =  skip_one_varid ITlabelvarid
    alex_action_59 =  token IToubxparen
    alex_action_60 =  token ITcubxparen
    alex_action_61 =  special IToparen
    alex_action_62 =  special ITcparen
    alex_action_63 =  special ITobrack
    alex_action_64 =  special ITcbrack
    alex_action_65 =  special ITcomma
    alex_action_66 =  special ITsemi
    alex_action_67 =  special ITbackquote
    alex_action_68 =  open_brace
    alex_action_69 =  close_brace
    alex_action_70 =  qdo_token ITdo
    alex_action_71 =  qdo_token ITmdo
    alex_action_72 =  idtoken qvarid
    alex_action_73 =  idtoken qconid
    alex_action_74 =  varid
    alex_action_75 =  idtoken conid
    alex_action_76 =  idtoken qvarid
    alex_action_77 =  idtoken qconid
    alex_action_78 =  varid
    alex_action_79 =  idtoken conid
    alex_action_80 =  varsym_tight_infix
    alex_action_81 =  varsym_prefix
    alex_action_82 =  varsym_suffix
    alex_action_83 =  varsym_loose_infix
    alex_action_84 =  idtoken qvarsym
    alex_action_85 =  idtoken qconsym
    alex_action_86 =  consym
    alex_action_87 =  tok_num positive 0 0 decimal
    alex_action_88 =  tok_num positive 2 2 binary
    alex_action_89 =  tok_num positive 2 2 octal
    alex_action_90 =  tok_num positive 2 2 hexadecimal
    alex_action_91 =  tok_num negative 1 1 decimal
    alex_action_92 =  tok_num negative 3 3 binary
    alex_action_93 =  tok_num negative 3 3 octal
    alex_action_94 =  tok_num negative 3 3 hexadecimal
    alex_action_95 =  tok_frac 0 tok_float
    alex_action_96 =  tok_frac 0 tok_float
    alex_action_97 =  tok_frac 0 tok_hex_float
    alex_action_98 =  tok_frac 0 tok_hex_float
    alex_action_99 =  tok_primint positive 0 1 decimal
    alex_action_100 =  tok_primint positive 2 3 binary
    alex_action_101 =  tok_primint positive 2 3 octal
    alex_action_102 =  tok_primint positive 2 3 hexadecimal
    alex_action_103 =  tok_primint negative 1 2 decimal
    alex_action_104 =  tok_primint negative 3 4 binary
    alex_action_105 =  tok_primint negative 3 4 octal
    alex_action_106 =  tok_primint negative 3 4 hexadecimal
    alex_action_107 =  tok_primword 0 2 decimal
    alex_action_108 =  tok_primword 2 4 binary
    alex_action_109 =  tok_primword 2 4 octal
    alex_action_110 =  tok_primword 2 4 hexadecimal
    alex_action_111 =  tok_frac 1 tok_primfloat
    alex_action_112 =  tok_frac 2 tok_primdouble
    alex_action_113 =  tok_frac 1 tok_primfloat
    alex_action_114 =  tok_frac 2 tok_primdouble
    alex_action_115 =  lex_char_tok
    alex_action_116 =  lex_string_tok
    {-# 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))

            check_accs (AlexAccPred a predx rest)
               | predx user__ orig_input (I# (len)) input__
               = AlexLastAcc a input__ (I# (len))
               | otherwise
               = check_accs rest
            check_accs (AlexAccSkipPred predx rest)
               | predx user__ orig_input (I# (len)) input__
               = AlexLastSkip input__ (I# (len))
               | otherwise
               = check_accs rest

    data AlexLastAcc
      = AlexNone
      | AlexLastAcc !Int !AlexInput !Int
      | AlexLastSkip     !AlexInput !Int

    data AlexAcc user
      = AlexAccNone
      | AlexAcc Int
      | AlexAccSkip

      | AlexAccPred Int (AlexAccPred user) (AlexAcc user)
      | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)

    type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool

    -- -----------------------------------------------------------------------------
    -- Predicates on a rule

    alexAndPred p1 p2 user__ in1 len in2
      = p1 user__ in1 len in2 && p2 user__ in1 len in2

    --alexPrevCharIsPred :: Char -> AlexAccPred _
    alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__

    alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)

    --alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
    alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__

    --alexRightContext :: Int -> AlexAccPred _
    alexRightContext (I# (sc)) user__ _ _ input__ =
         case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
              (AlexNone, _) -> False
              _ -> True
            -- TODO: there's no need to find the longest
            -- match when checking the right context, just
            -- the first match will do.