diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2008-2009 Bernard James Pope 
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the author nor the names of his contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+> import Distribution.Simple
+> main = defaultMain
diff --git a/dist/build/Language/Python/Version3/Parser/Lexer.hs b/dist/build/Language/Python/Version3/Parser/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/Language/Python/Version3/Parser/Lexer.hs
@@ -0,0 +1,628 @@
+{-# OPTIONS -fglasgow-exts -cpp #-}
+{-# LINE 1 "src/Language/Python/Version3/Parser/Lexer.x" #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.Lexer 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Implementation of a lexer for Python version 3 programs. Generated by
+-- alex. 
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.Lexer 
+   (initStartCodeStack, lexToken, endOfFileToken, lexCont) where
+
+import Language.Python.Version3.Parser.Token hiding (True, False)
+import qualified Language.Python.Version3.Parser.Token as Token
+import Language.Python.Version3.Parser.ParserMonad hiding (location)
+import Language.Python.Data.SrcLocation
+import qualified Data.Map as Map
+import Control.Monad (liftM)
+import Data.List (foldl')
+import Numeric (readHex, readOct)
+import qualified Data.ByteString.Char8 as BS (pack)
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+import Data.Char (ord)
+import Data.Array.Base (unsafeAt)
+#else
+import Array
+import Char (ord)
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+alex_base :: AlexAddr
+alex_base = AlexA# "\xf8\xff\xff\xff\x6e\x00\x00\x00\x73\x00\x00\x00\x78\x00\x00\x00\xe3\xff\xff\xff\xfd\xff\xff\xff\xfe\xff\xff\xff\x7c\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x03\x00\x00\x00\x6d\x00\x00\x00\x77\x00\x00\x00\xb2\x00\x00\x00\xbe\x00\x00\x00\xdb\x00\x00\x00\xf9\x00\x00\x00\x16\x01\x00\x00\x34\x01\x00\x00\x7d\x01\x00\x00\x8c\x01\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x92\x00\x00\x00\x03\x01\x00\x00\x96\x01\x00\x00\xad\x01\x00\x00\x59\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xff\xff\xa9\x00\x00\x00\xae\x00\x00\x00\x2a\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\xf4\x00\x00\x00\xfa\x00\x00\x00\xe4\x01\x00\x00\x75\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x5f\x02\x00\x00\xdf\x02\x00\x00\x3d\x03\x00\x00\xb8\x03\x00\x00\x86\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x38\x04\x00\x00\xb8\x04\x00\x00\x16\x05\x00\x00\x91\x05\x00\x00\x8a\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\xf5\x00\x00\x00\x32\x01\x00\x00\x88\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x4d\x01\x00\x00\x75\x01\x00\x00\x8c\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x11\x06\x00\x00\x91\x06\x00\x00\x11\x07\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x91\x07\x00\x00\x11\x08\x00\x00\x91\x08\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x99\x00\x00\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\xb9\x00\x00\x00\xa6\x00\x00\x00\xc6\x00\x00\x00\xdf\x00\x00\x00\x35\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xac\x00\x00\x00\xaf\x00\x00\x00\xf7\x00\x00\x00\xb1\x00\x00\x00\xfd\x00\x00\x00\x2e\x01\x00\x00\x4b\x01\x00\x00\x36\x01\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\xb6\x00\x00\x00\xb7\x00\x00\x00\x38\x01\x00\x00\xb8\x00\x00\x00\x11\x09\x00\x00\x91\x09\x00\x00\x11\x0a\x00\x00\x91\x0a\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\xd2\x00\x00\x00\xd3\x00\x00\x00\x49\x01\x00\x00\xd4\x00\x00\x00\x11\x0b\x00\x00\x91\x0b\x00\x00\x11\x0c\x00\x00\x91\x0c\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\xde\x00\x00\x00\x1b\x01\x00\x00\xf8\x00\x00\x00\x3f\x01\x00\x00\x4c\x01\x00\x00\x78\x01\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x1f\x01\x00\x00\x4f\x01\x00\x00\x76\x01\x00\x00\x51\x01\x00\x00\x7a\x01\x00\x00\x98\x01\x00\x00\xc6\x01\x00\x00\xae\x01\x00\x00\x00\x00\x00\x00\x52\x01\x00\x00\x53\x01\x00\x00\x56\x01\x00\x00\xc5\x01\x00\x00\x58\x01\x00\x00\x11\x0d\x00\x00\x91\x0d\x00\x00\x11\x0e\x00\x00\x91\x0e\x00\x00\x00\x00\x00\x00\x5a\x01\x00\x00\x5b\x01\x00\x00\x62\x01\x00\x00\xc7\x01\x00\x00\x64\x01\x00\x00\x11\x0f\x00\x00\x91\x0f\x00\x00\x11\x10\x00\x00\x91\x10\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\xe1\x10\x00\x00\x2c\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x00\x00\x00\x00\x00\x00\xe8\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xdc\x00\x00\x00\x63\x01\x00\x00\x60\x01\x00\x00\xe2\x00\x00\x00\x4e\x01\x00\x00\x65\x01\x00\x00\xaf\x01\x00\x00\x67\x01\x00\x00\xb8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x6d\x01\x00\x00\x7b\x01\x00\x00\xc3\x01\x00\x00\x00\x00\x00\x00\xc4\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA# "\x00\x00\x07\x00\xa0\x00\x07\x00\x07\x00\xa1\x00\x05\x00\xff\xff\xff\xff\x08\x00\xff\xff\xff\xff\x0a\x00\x08\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x07\x00\xc2\x00\x3a\x00\x05\x00\x56\x00\xb8\x00\xc6\x00\x1f\x00\xa8\x00\xa9\x00\xb5\x00\xb3\x00\xd5\x00\xaf\x00\x13\x00\xb6\x00\x12\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\xc8\x00\xd7\x00\xba\x00\xc0\x00\xbc\x00\x22\x00\xd6\x00\xa6\x00\x2e\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x27\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xaa\x00\x09\x00\xab\x00\xc3\x00\xa6\x00\x20\x00\xa6\x00\x2e\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\x27\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xa6\x00\xac\x00\xc4\x00\xad\x00\xb2\x00\x07\x00\xa4\x00\x07\x00\x07\x00\xa5\x00\x07\x00\xa2\x00\x07\x00\x07\x00\xa3\x00\x07\x00\x29\x00\x07\x00\x07\x00\x07\x00\x60\x00\x07\x00\x07\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x26\x00\x07\x00\x6a\x00\x2d\x00\x05\x00\x74\x00\x07\x00\x34\x00\x3d\x00\x05\x00\x3b\x00\x07\x00\x43\x00\x41\x00\x05\x00\x07\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x7e\x00\x14\x00\xff\xff\x47\x00\x88\x00\xff\xff\x16\x00\xff\xff\x92\x00\x9c\x00\xff\xff\x14\x00\x4d\x00\x78\x00\x79\x00\x50\x00\x16\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x09\x00\x51\x00\x50\x00\x53\x00\x5a\x00\x09\x00\x1e\x00\xa0\x00\x14\x00\x5b\x00\x09\x00\x1d\x00\x5a\x00\x16\x00\x5d\x00\xa2\x00\xa4\x00\x64\x00\x14\x00\x65\x00\x64\x00\x67\x00\x52\x00\x16\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0b\x00\x55\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x6e\x00\x6f\x00\x6e\x00\x71\x00\x16\x00\xc9\x00\xff\xff\xff\xff\x78\x00\xff\xff\xff\xff\x14\x00\xff\xff\x21\x00\x55\x00\xff\xff\x16\x00\x0b\x00\x21\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x58\x00\xb0\x00\x39\x00\x00\x00\xce\x00\x7b\x00\x24\x00\x16\x00\x55\x00\x5c\x00\xd4\x00\x14\x00\x23\x00\x58\x00\x14\x00\x5f\x00\x16\x00\x82\x00\x0b\x00\x16\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x58\x00\xff\xff\x7a\x00\x14\x00\xff\xff\x14\x00\x83\x00\x59\x00\x16\x00\x0b\x00\x16\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x28\x00\x3c\x00\x58\x00\x62\x00\x38\x00\x5f\x00\x28\x00\xff\xff\x63\x00\x62\x00\xff\xff\x14\x00\x54\x00\x5f\x00\x14\x00\x66\x00\x16\x00\x7d\x00\x0b\x00\x16\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x7d\x00\x3f\x00\x70\x00\x82\x00\x5e\x00\x85\x00\x8c\x00\x8d\x00\x1c\x00\x80\x00\x8c\x00\x14\x00\x8f\x00\x14\x00\x96\x00\x97\x00\x16\x00\xff\xff\x16\x00\x7d\x00\xff\xff\x18\x00\x96\x00\x81\x00\x99\x00\xca\x00\xae\x00\x00\x00\x62\x00\xcd\x00\x1a\x00\xb4\x00\x3c\x00\xb7\x00\x00\x00\x58\x00\x62\x00\x00\x00\x6c\x00\x00\x00\x1c\x00\x3e\x00\x84\x00\x14\x00\x7c\x00\x80\x00\x87\x00\xcc\x00\x16\x00\x00\x00\xcb\x00\x00\x00\xd2\x00\x18\x00\xd3\x00\x76\x00\xbf\x00\x62\x00\x80\x00\x42\x00\xc1\x00\xb1\x00\x1a\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x15\x00\xd1\x00\x15\x00\x87\x00\x80\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x87\x00\x42\x00\x8a\x00\x8b\x00\x80\x00\x00\x00\x8a\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x8e\x00\x86\x00\x98\x00\xc5\x00\xb9\x00\xbd\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x8a\x00\xbe\x00\xbb\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x8a\x00\x25\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x9e\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2b\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x00\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2a\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2f\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x35\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x35\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x30\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x32\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x36\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x00\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x31\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x36\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x37\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x34\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x45\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x44\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x49\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4b\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4a\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4f\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6d\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x68\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6c\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x77\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x72\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x95\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x90\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x91\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x94\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\x93\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\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9b\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\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\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\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\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\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\x9b\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\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\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\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\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\x9f\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\x9a\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\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\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\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\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\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\x9b\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\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\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9e\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\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\xa7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+alex_check :: AlexAddr
+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x23\x00\x0a\x00\x0a\x00\x0a\x00\x0d\x00\x0d\x00\x0d\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x21\x00\x22\x00\x23\x00\x27\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\x0d\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\x0a\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\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0d\x00\x0b\x00\x0c\x00\x09\x00\x27\x00\x0b\x00\x0c\x00\x30\x00\x31\x00\x30\x00\x31\x00\x0a\x00\x20\x00\x27\x00\x0a\x00\x23\x00\x27\x00\x20\x00\x0a\x00\x0d\x00\x23\x00\x0a\x00\x20\x00\x0d\x00\x0a\x00\x23\x00\x20\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\x22\x00\x45\x00\x0a\x00\x0a\x00\x22\x00\x0d\x00\x4a\x00\x0a\x00\x22\x00\x22\x00\x0d\x00\x45\x00\x0a\x00\x22\x00\x22\x00\x27\x00\x4a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x5c\x00\x27\x00\x27\x00\x27\x00\x27\x00\x5c\x00\x27\x00\x0a\x00\x65\x00\x27\x00\x5c\x00\x27\x00\x27\x00\x6a\x00\x27\x00\x0a\x00\x0a\x00\x27\x00\x65\x00\x27\x00\x27\x00\x27\x00\x27\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2e\x00\x27\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x27\x00\x27\x00\x27\x00\x27\x00\x4a\x00\x3d\x00\x0a\x00\x0a\x00\x22\x00\x0d\x00\x0d\x00\x45\x00\x0a\x00\x5c\x00\x27\x00\x0d\x00\x4a\x00\x2e\x00\x5c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5c\x00\x2e\x00\x22\x00\xff\xff\x3d\x00\x22\x00\x27\x00\x6a\x00\x27\x00\x27\x00\x3d\x00\x45\x00\x27\x00\x5c\x00\x65\x00\x27\x00\x4a\x00\x22\x00\x2e\x00\x6a\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\x5c\x00\x0a\x00\x22\x00\x45\x00\x0d\x00\x65\x00\x22\x00\x0d\x00\x4a\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x5c\x00\x5c\x00\x5c\x00\x5c\x00\x22\x00\x27\x00\x5c\x00\x0a\x00\x0d\x00\x5c\x00\x0d\x00\x45\x00\x27\x00\x27\x00\x65\x00\x27\x00\x4a\x00\x22\x00\x2e\x00\x6a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x22\x00\x27\x00\x22\x00\x27\x00\x22\x00\x22\x00\x22\x00\x42\x00\x5c\x00\x22\x00\x45\x00\x22\x00\x65\x00\x22\x00\x22\x00\x4a\x00\x0a\x00\x6a\x00\x22\x00\x0d\x00\x4f\x00\x22\x00\x0d\x00\x22\x00\x3d\x00\x3e\x00\xff\xff\x5c\x00\x3d\x00\x58\x00\x2a\x00\x5c\x00\x2f\x00\xff\xff\x5c\x00\x5c\x00\xff\xff\x5c\x00\xff\xff\x62\x00\x22\x00\x22\x00\x65\x00\x22\x00\x5c\x00\x22\x00\x3d\x00\x6a\x00\xff\xff\x3d\x00\xff\xff\x3d\x00\x6f\x00\x3d\x00\x5c\x00\x3d\x00\x5c\x00\x5c\x00\x5c\x00\x3d\x00\x2e\x00\x78\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2b\x00\x3d\x00\x2d\x00\x22\x00\x5c\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\x22\x00\x5c\x00\x5c\x00\x0d\x00\x5c\x00\xff\xff\x5c\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\x22\x00\x22\x00\x22\x00\x26\x00\x3c\x00\x3d\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x5c\x00\x3d\x00\x3e\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\x3d\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x27\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\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\x5c\x00\x5c\x00\x5c\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\x7c\x00\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\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\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\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\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\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x06\x00\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\x20\x00\x20\x00\x20\x00\xff\xff\xff\xff\xff\xff\x26\x00\x26\x00\xff\xff\x26\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\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x41\x00\x41\x00\x41\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\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\xff\xff\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\x61\x00\xff\xff\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\x7f\x00\xff\xff\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\x89\x00\xff\xff\x93\x00\x93\x00\x93\x00\x93\x00\x93\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x9d\x00\x9d\x00\x9d\x00\x9d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_accept = listArray (0::Int,215) [[],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_27))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[],[],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_40))],[],[],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_10))],[],[],[],[],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_11))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_13))],[],[],[(AlexAcc (alex_action_32))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[],[],[],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_15))],[],[],[],[],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_16))],[],[],[],[],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_17))],[],[],[],[],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_18))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_19))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_21))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_22))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_24))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_25))],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_26))],[],[(AlexAccSkip)],[],[(AlexAccSkip)],[],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_41))],[],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_57))],[],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))]]
+{-# LINE 193 "src/Language/Python/Version3/Parser/Lexer.x" #-}
+
+-- Functions for building tokens 
+
+type StartCode = Int
+type Action = SrcLocation -> Int -> String -> P Token 
+
+dedentation :: Action
+dedentation loc _len _str = do
+   let endCol = sloc_column loc 
+   topIndent <- getIndent
+   case compare endCol topIndent of
+      EQ -> do popStartCode
+               lexToken 
+      LT -> do popIndent
+               return dedentToken 
+      GT -> failP loc ["indentation error"]
+
+-- Beginning of. BOF = beginning of file, BOL = beginning of line
+data BO = BOF | BOL
+
+indentation :: BO -> Action 
+-- Check if we are at the EOF. If yes, we may need to generate a newline,
+-- in case we came here from BOL (but not BOF).
+indentation bo _loc _len [] = do
+   popStartCode
+   case bo of
+      BOF -> lexToken
+      BOL -> return newlineToken
+indentation bo loc _len _str = do
+   popStartCode
+   parenDepth <- getParenStackDepth
+   if parenDepth > 0
+      then lexToken
+      else do 
+         topIndent <- getIndent
+         let endCol = sloc_column loc 
+         case compare endCol topIndent of
+            EQ -> case bo of
+                     BOF -> lexToken
+                     BOL -> return newlineToken   
+            LT -> do pushStartCode dedent
+                     return newlineToken 
+            GT -> do pushIndent endCol 
+                     return indentToken 
+   where
+   -- the location of the newline is not known here 
+   newlineToken = Newline NoLocation
+   indentToken = Indent loc 
+
+begin :: StartCode -> Action 
+begin code loc len inp = do
+   pushStartCode code
+   lexToken 
+
+symbolToken :: (SrcLocation -> Token) -> Action 
+symbolToken mkToken location _ _ = return (mkToken location)
+
+token_fail :: String -> Action 
+token_fail message location _ _ 
+   = failP location [ "Lexical Error !", message]
+
+token :: (SrcLocation -> a -> Token) -> (String -> a) -> Action 
+token mkToken read location len str 
+   = return $ mkToken location (read $ take len str)
+
+-- a keyword or an identifier (the syntax overlaps)
+keywordOrIdent :: String -> SrcLocation -> P Token
+keywordOrIdent str location
+   = return $ case Map.lookup str keywords of
+         Just symbol -> symbol location
+         Nothing -> Identifier location str  
+
+-- mapping from strings to keywords
+keywords :: Map.Map String (SrcLocation -> Token) 
+keywords = Map.fromList keywordNames 
+
+keywordNames :: [(String, SrcLocation -> Token)]
+keywordNames =
+   [ ("False", Token.False), ("class", Class), ("finally", Finally), ("is", Is), ("return", Return)
+   , ("None", None), ("continue", Continue), ("for", For), ("lambda", Lambda), ("try", Try)
+   , ("True", Token.True), ("def", Def), ("from", From), ("nonlocal", NonLocal), ("while", While)
+   , ("and", And), ("del", Delete), ("global", Global), ("not", Not), ("with", With)
+   , ("as", As), ("elif", Elif), ("if", If), ("or", Or), ("yield", Yield)
+   , ("assert", Assert), ("else", Else), ("import", Import), ("pass", Pass)
+   , ("break", Break), ("except", Except), ("in", In), ("raise", Raise)
+   ]
+
+-- The lexer starts off in the beginning of file state (bof)
+initStartCodeStack :: [Int]
+initStartCodeStack = [bof,0]
+
+-- special tokens for the end of file and end of line
+endOfFileToken :: Token
+endOfFileToken = EOF
+newlineToken = Newline NoLocation
+dedentToken = Dedent NoLocation
+
+-- Test if we are at the end of the line or file
+atEOLorEOF :: a -> AlexInput -> Int -> AlexInput -> Bool
+atEOLorEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) 
+   = null inputAfterToken || nextChar == '\n' || nextChar == '\r'
+   where
+   nextChar = head inputAfterToken 
+
+notEOF :: a -> AlexInput -> Int -> AlexInput -> Bool
+notEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) 
+   = not (null inputAfterToken)
+
+readBinary :: String -> Integer
+readBinary 
+   = toBinary . drop 2 
+   where
+   toBinary = foldl' acc 0
+   acc b '0' = 2 * b
+   acc b '1' = 2 * b + 1
+
+{-
+floatnumber   ::=  pointfloat | exponentfloat
+pointfloat    ::=  [intpart] fraction | intpart "."
+exponentfloat ::=  (intpart | pointfloat) exponent
+intpart       ::=  digit+
+fraction      ::=  "." digit+
+exponent      ::=  ("e" | "E") ["+" | "-"] digit+
+-}
+readFloat :: String -> Double
+readFloat str@('.':cs) = read ('0':readFloatRest str)
+readFloat str = read (readFloatRest str)
+readFloatRest :: String -> String
+readFloatRest [] = []
+readFloatRest ['.'] = ".0"
+readFloatRest (c:cs) = c : readFloatRest cs
+
+mkString :: Int -> Int -> (SrcLocation -> String -> Token) -> Action
+mkString leftSkip rightSkip toToken loc len str = do
+   let contentLen = len - (leftSkip + rightSkip)
+   let contents = take contentLen $ drop leftSkip str
+   -- return $ String loc $ processString contents 
+   return $ toToken loc contents 
+
+stringToken :: SrcLocation -> String -> Token
+stringToken loc str = String loc $ unescapeString str
+
+rawStringToken :: SrcLocation -> String -> Token
+rawStringToken loc str = String loc $ unescapeRawString str
+
+byteStringToken :: SrcLocation -> String -> Token
+byteStringToken loc str = ByteString loc $ BS.pack $ unescapeString str
+
+rawByteStringToken :: SrcLocation -> String -> Token
+rawByteStringToken loc str = ByteString loc $ BS.pack $ unescapeRawString str
+
+openParen :: (SrcLocation -> Token) -> Action
+openParen mkToken loc _len _str = do
+   let token = mkToken loc
+   pushParen token 
+   return token 
+
+closeParen :: (SrcLocation -> Token) -> Action
+closeParen mkToken loc _len _str = do
+  let token = mkToken loc
+  topParen <- getParen
+  case topParen of
+     Nothing -> failP loc err1 
+     Just open -> if matchParen open token 
+                    then popParen >> return token
+                    else failP loc err2
+   where
+   -- XXX fix these error messages
+   err1 = ["Lexical error ! unmatched closing paren"]
+   err2 = ["Lexical error ! unmatched closing paren"]
+
+matchParen :: Token -> Token -> Bool
+matchParen (LeftRoundBracket {}) (RightRoundBracket {}) = True
+matchParen (LeftBrace {}) (RightBrace {}) = True
+matchParen (LeftSquareBracket {}) (RightSquareBracket {}) = True
+matchParen _ _ = False
+
+unescapeString :: String -> String
+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)
+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')
+unescapeString ('\\':'"':cs) = '"' : unescapeString cs -- Double quote (")
+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs -- ASCII Bell (BEL)
+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs -- ASCII Backspace (BS)
+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs -- ASCII Formfeed (FF)
+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs -- ASCII Linefeed (LF)
+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs -- ASCII Carriage Return (CR)
+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs -- ASCII Horizontal Tab (TAB)
+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs -- ASCII Vertical Tab (VT)
+unescapeString ('\\':'\n':cs) = unescapeString cs -- line continuation
+unescapeString ('\\':rest@(o:_))
+   | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest 
+unescapeString ('\\':'x':rest@(h:_))
+   | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest 
+unescapeString (c:cs) = c : unescapeString cs 
+unescapeString [] = []
+
+unescapeRawString :: String -> String
+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')
+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")
+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation
+unescapeRawString (c:cs) = c : unescapeRawString cs
+unescapeRawString [] = []
+
+{- 
+   This is a bit complicated because Python allows between 1 and 3 octal
+   characters after the \, and 1 and 2 hex characters after a \x.
+-}
+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String
+unescapeNumeric n numericDigits readNumeric str
+   = loop n [] str 
+   where
+   loop _ acc [] = [numericToChar acc]
+   loop 0 acc rest
+      = numericToChar acc : unescapeString rest
+   loop n acc (c:cs)
+      | c `elem` numericDigits = loop (n-1) (c:acc) cs
+      | otherwise = numericToChar acc : unescapeString (c:cs)
+   numericToChar :: String -> Char
+   numericToChar = toEnum . readNumeric . reverse
+
+octalDigits, hexDigits :: String
+octalDigits = "01234567"
+hexDigits = "0123456789abcdef"
+ 
+
+-- -----------------------------------------------------------------------------
+-- Functionality required by Alex 
+
+type AlexInput = (SrcLocation, String)
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar _ = error "alexInputPrevChar not used"
+
+alexGetChar :: AlexInput -> Maybe (Char, AlexInput)
+alexGetChar (loc, input) 
+   | null input  = Nothing
+   | otherwise = Just (nextChar, (nextLoc, rest))
+   where
+   nextChar = head input
+   rest = tail input 
+   nextLoc = moveChar nextChar loc
+
+moveChar :: Char -> SrcLocation -> SrcLocation 
+moveChar '\n' = incLine 1 
+moveChar '\t' = incTab 
+moveChar '\r' = id 
+moveChar _    = incColumn 1 
+
+lexicalError :: P a
+lexicalError = do
+  location <- getLocation
+  c <- liftM head getInput
+  failP location 
+        ["Lexical error !",
+         "The character " ++ show c ++ " does not fit here."]
+
+parseError :: P a
+parseError = do
+  token <- getLastToken
+  failP (location token)
+        ["Syntax error !",
+         "The symbol `" ++ show token ++ "' does not fit here."]
+
+lexToken :: P Token
+lexToken = do
+  location <- getLocation
+  input <- getInput
+  startCode <- getStartCode
+  case alexScan (location, input) startCode of
+    AlexEOF -> do
+       depth <- getIndentStackDepth
+       if depth <= 1 
+          then return endOfFileToken
+          else do 
+             popIndent
+             return dedentToken
+    AlexError _ -> lexicalError
+    AlexSkip (nextLocation, rest) len -> do
+       setLocation nextLocation 
+       setInput rest 
+       lexToken
+    AlexToken (nextLocation, rest) len action -> do
+       setLocation nextLocation 
+       setInput rest 
+       token <- action location len input 
+       setLastToken token
+       return token
+
+lexCont :: (Token -> P a) -> P a
+lexCont cont = do
+  tok <- lexToken
+  cont tok
+
+
+bof,bol,dedent :: Int
+bof = 1
+bol = 2
+dedent = 3
+alex_action_3 =  token Token.Float readFloat 
+alex_action_4 =  token Token.Integer read 
+alex_action_5 =  token Token.Imaginary (readFloat.init) 
+alex_action_6 =  token Token.Integer read 
+alex_action_7 =  token Token.Integer read 
+alex_action_8 =  token Token.Integer read 
+alex_action_9 =  token Token.Integer readBinary 
+alex_action_10 =  mkString 1 1 stringToken 
+alex_action_11 =  mkString 2 1 rawStringToken 
+alex_action_12 =  mkString 2 1 byteStringToken 
+alex_action_13 =  mkString 3 1 rawByteStringToken 
+alex_action_14 =  mkString 1 1 stringToken 
+alex_action_15 =  mkString 2 1 rawStringToken 
+alex_action_16 =  mkString 2 1 byteStringToken 
+alex_action_17 =  mkString 3 1 rawByteStringToken 
+alex_action_18 =  mkString 3 3 stringToken 
+alex_action_19 =  mkString 4 3 rawStringToken 
+alex_action_20 =  mkString 4 3 byteStringToken 
+alex_action_21 =  mkString 5 3 rawByteStringToken 
+alex_action_22 =  mkString 3 3 stringToken 
+alex_action_23 =  mkString 4 3 rawStringToken 
+alex_action_24 =  mkString 4 3 byteStringToken 
+alex_action_25 =  mkString 5 3 rawByteStringToken 
+alex_action_26 =  begin bol 
+alex_action_27 =  dedentation 
+alex_action_29 =  indentation BOL 
+alex_action_31 =  indentation BOF 
+alex_action_32 =  \loc len str -> keywordOrIdent (take len str) loc 
+alex_action_33 =  openParen Token.LeftRoundBracket 
+alex_action_34 =  closeParen Token.RightRoundBracket 
+alex_action_35 =  openParen Token.LeftSquareBracket 
+alex_action_36 =  closeParen Token.RightSquareBracket 
+alex_action_37 =  openParen Token.LeftBrace 
+alex_action_38 =  closeParen Token.RightBrace 
+alex_action_39 =  symbolToken Token.RightArrow 
+alex_action_40 =  symbolToken Token.Dot 
+alex_action_41 =  symbolToken Token.Ellipsis 
+alex_action_42 =  symbolToken Token.Tilde 
+alex_action_43 =  symbolToken Token.Plus 
+alex_action_44 =  symbolToken Token.Minus 
+alex_action_45 =  symbolToken Token.Exponent 
+alex_action_46 =  symbolToken Token.Mult 
+alex_action_47 =  symbolToken Token.Div 
+alex_action_48 =  symbolToken Token.FloorDiv 
+alex_action_49 =  symbolToken Token.Modulo 
+alex_action_50 =  symbolToken Token.ShiftLeft 
+alex_action_51 =  symbolToken Token.ShiftRight 
+alex_action_52 =  symbolToken Token.LessThan 
+alex_action_53 =  symbolToken Token.LessThanEquals 
+alex_action_54 =  symbolToken Token.GreaterThan 
+alex_action_55 =  symbolToken Token.GreaterThanEquals 
+alex_action_56 =  symbolToken Token.Equality 
+alex_action_57 =  symbolToken Token.NotEquals 
+alex_action_58 =  symbolToken Token.Xor 
+alex_action_59 =  symbolToken Token.BinaryOr 
+alex_action_60 =  symbolToken Token.And 
+alex_action_61 =  symbolToken Token.BinaryAnd 
+alex_action_62 =  symbolToken Token.Or 
+alex_action_63 =  symbolToken Token.Colon 
+alex_action_64 =  symbolToken Token.Assign 
+alex_action_65 =  symbolToken Token.PlusAssign 
+alex_action_66 =  symbolToken Token.MinusAssign 
+alex_action_67 =  symbolToken Token.MultAssign 
+alex_action_68 =  symbolToken Token.DivAssign 
+alex_action_69 =  symbolToken Token.ModAssign 
+alex_action_70 =  symbolToken Token.PowAssign 
+alex_action_71 =  symbolToken Token.BinAndAssign 
+alex_action_72 =  symbolToken Token.BinOrAssign 
+alex_action_73 =  symbolToken Token.BinXorAssign 
+alex_action_74 =  symbolToken Token.LeftShiftAssign 
+alex_action_75 =  symbolToken Token.RightShiftAssign 
+alex_action_76 =  symbolToken Token.FloorDivAssign 
+alex_action_77 =  symbolToken Token.Comma 
+alex_action_78 =  symbolToken Token.At 
+alex_action_79 =  symbolToken Token.SemiColon 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command line>" #-}
+{-# 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
+
+{-# LINE 35 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 45 "templates/GenericTemplate.hs" #-}
+
+
+data AlexAddr = AlexA# Addr#
+
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+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
+  indexInt16OffAddr# arr off
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+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
+  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 alexGetChar input of
+			Nothing -> 
+
+
+
+				   AlexEOF
+			Just _ ->
+
+
+
+				   AlexError input'
+
+	(AlexLastSkip input len, _) ->
+
+
+
+		AlexSkip input len
+
+	(AlexLastAcc k input len, _) ->
+
+
+
+		AlexToken input len 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 alexGetChar input of
+     Nothing -> (new_acc, input)
+     Just (c, new_input) -> 
+
+
+
+	let
+		base   = alexIndexInt32OffAddr alex_base s
+		(I# (ord_c)) = ord c
+		offset = (base +# ord_c)
+		check  = alexIndexInt16OffAddr alex_check offset
+		
+		new_s = if (offset >=# 0#) && (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 (len +# 1#) 
+			new_input new_s new_acc
+
+  where
+	check_accs [] = last_acc
+	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))
+	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))
+	check_accs (AlexAccPred a pred : rest)
+	   | pred user orig_input (I# (len)) input
+	   = AlexLastAcc a input (I# (len))
+	check_accs (AlexAccSkipPred pred : rest)
+	   | pred user orig_input (I# (len)) input
+	   = AlexLastSkip input (I# (len))
+	check_accs (_ : rest) = check_accs rest
+
+data AlexLastAcc a
+  = AlexNone
+  | AlexLastAcc a !AlexInput !Int
+  | AlexLastSkip  !AlexInput !Int
+
+data AlexAcc a user
+  = AlexAcc a
+  | AlexAccSkip
+  | AlexAccPred a (AlexAccPred user)
+  | AlexAccSkipPred (AlexAccPred 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
+
+--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.
+
+-- used by wrappers
+iUnbox (I# (i)) = i
diff --git a/dist/build/Language/Python/Version3/Parser/Parser.hs b/dist/build/Language/Python/Version3/Parser/Parser.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/Language/Python/Version3/Parser/Parser.hs
@@ -0,0 +1,4330 @@
+{-# OPTIONS -fglasgow-exts -cpp #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.Parser 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Implementation of the Python version 3 parser. Generated by happy. 
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval) where
+
+import Data.Char (isSpace, isAlpha, isDigit)
+import Language.Python.Version3.Parser.Lexer
+import Language.Python.Version3.Parser.Token hiding (True, False)
+import qualified Language.Python.Version3.Parser.Token as Token
+import Language.Python.Version3.Syntax.AST as AST
+import Language.Python.Version3.Parser.ParserUtils
+import Language.Python.Version3.Parser.ParserMonad
+import Language.Python.Data.SrcLocation
+import Data.List (foldl')
+import qualified Data.ByteString.Char8 as BS (ByteString)
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+
+-- parser produced by Happy Version 1.17
+
+newtype HappyAbsSyn  = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = GHC.Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn6 :: ([Statement]) -> (HappyAbsSyn )
+happyIn6 x = unsafeCoerce# x
+{-# INLINE happyIn6 #-}
+happyOut6 :: (HappyAbsSyn ) -> ([Statement])
+happyOut6 x = unsafeCoerce# x
+{-# INLINE happyOut6 #-}
+happyIn7 :: (Module) -> (HappyAbsSyn )
+happyIn7 x = unsafeCoerce# x
+{-# INLINE happyIn7 #-}
+happyOut7 :: (HappyAbsSyn ) -> (Module)
+happyOut7 x = unsafeCoerce# x
+{-# INLINE happyOut7 #-}
+happyIn8 :: ([Statement]) -> (HappyAbsSyn )
+happyIn8 x = unsafeCoerce# x
+{-# INLINE happyIn8 #-}
+happyOut8 :: (HappyAbsSyn ) -> ([Statement])
+happyOut8 x = unsafeCoerce# x
+{-# INLINE happyOut8 #-}
+happyIn9 :: ([[Statement]]) -> (HappyAbsSyn )
+happyIn9 x = unsafeCoerce# x
+{-# INLINE happyIn9 #-}
+happyOut9 :: (HappyAbsSyn ) -> ([[Statement]])
+happyOut9 x = unsafeCoerce# x
+{-# INLINE happyOut9 #-}
+happyIn10 :: ([Statement]) -> (HappyAbsSyn )
+happyIn10 x = unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn ) -> ([Statement])
+happyOut10 x = unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: (Expr) -> (HappyAbsSyn )
+happyIn11 x = unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn ) -> (Expr)
+happyOut11 x = unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: (()) -> (HappyAbsSyn )
+happyIn12 x = unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn ) -> (())
+happyOut12 x = unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: (Decorator) -> (HappyAbsSyn )
+happyIn13 x = unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn ) -> (Decorator)
+happyOut13 x = unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: ([Decorator]) -> (HappyAbsSyn )
+happyIn14 x = unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn ) -> ([Decorator])
+happyOut14 x = unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: ([Decorator]) -> (HappyAbsSyn )
+happyIn15 x = unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn ) -> ([Decorator])
+happyOut15 x = unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: (Statement) -> (HappyAbsSyn )
+happyIn16 x = unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn ) -> (Statement)
+happyOut16 x = unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: (Statement) -> (HappyAbsSyn )
+happyIn17 x = unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn ) -> (Statement)
+happyOut17 x = unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: (Statement) -> (HappyAbsSyn )
+happyIn18 x = unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn ) -> (Statement)
+happyOut18 x = unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn19 x = unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut19 x = unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn20 x = unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut20 x = unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn21 x = unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut21 x = unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn22 x = unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut22 x = unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn23 x = unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut23 x = unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: ((Ident, Maybe Expr)) -> (HappyAbsSyn )
+happyIn24 x = unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn ) -> ((Ident, Maybe Expr))
+happyOut24 x = unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn25 x = unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut25 x = unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn26 x = unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut26 x = unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: (Parameter) -> (HappyAbsSyn )
+happyIn27 x = unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn ) -> (Parameter)
+happyOut27 x = unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: (Parameter) -> (HappyAbsSyn )
+happyIn28 x = unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn ) -> (Parameter)
+happyOut28 x = unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: (Maybe (Ident, Maybe Expr)) -> (HappyAbsSyn )
+happyIn29 x = unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn ) -> (Maybe (Ident, Maybe Expr))
+happyOut29 x = unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: (Parameter) -> (HappyAbsSyn )
+happyIn30 x = unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn ) -> (Parameter)
+happyOut30 x = unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn31 x = unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut31 x = unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn32 x = unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut32 x = unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyIn33 :: ([Parameter]) -> (HappyAbsSyn )
+happyIn33 x = unsafeCoerce# x
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn ) -> ([Parameter])
+happyOut33 x = unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+happyIn34 :: (Parameter) -> (HappyAbsSyn )
+happyIn34 x = unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn ) -> (Parameter)
+happyOut34 x = unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: (Parameter) -> (HappyAbsSyn )
+happyIn35 x = unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn ) -> (Parameter)
+happyOut35 x = unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: (Maybe (Ident, Maybe Expr)) -> (HappyAbsSyn )
+happyIn36 x = unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn ) -> (Maybe (Ident, Maybe Expr))
+happyOut36 x = unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: (Parameter) -> (HappyAbsSyn )
+happyIn37 x = unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn ) -> (Parameter)
+happyOut37 x = unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: (Ident) -> (HappyAbsSyn )
+happyIn38 x = unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn ) -> (Ident)
+happyOut38 x = unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (Ident) -> (HappyAbsSyn )
+happyIn39 x = unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn ) -> (Ident)
+happyOut39 x = unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: ([Statement]) -> (HappyAbsSyn )
+happyIn40 x = unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn ) -> ([Statement])
+happyOut40 x = unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: ([Statement]) -> (HappyAbsSyn )
+happyIn41 x = unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn ) -> ([Statement])
+happyOut41 x = unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: (()) -> (HappyAbsSyn )
+happyIn42 x = unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn ) -> (())
+happyOut42 x = unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: ([Statement]) -> (HappyAbsSyn )
+happyIn43 x = unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn ) -> ([Statement])
+happyOut43 x = unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: (Statement) -> (HappyAbsSyn )
+happyIn44 x = unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn ) -> (Statement)
+happyOut44 x = unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: (Statement) -> (HappyAbsSyn )
+happyIn45 x = unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn ) -> (Statement)
+happyOut45 x = unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: (Either [Expr] (AssignOp, Expr)) -> (HappyAbsSyn )
+happyIn46 x = unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn ) -> (Either [Expr] (AssignOp, Expr))
+happyOut46 x = unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: ([Expr]) -> (HappyAbsSyn )
+happyIn47 x = unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn ) -> ([Expr])
+happyOut47 x = unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: ([Expr]) -> (HappyAbsSyn )
+happyIn48 x = unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn ) -> ([Expr])
+happyOut48 x = unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: (Expr) -> (HappyAbsSyn )
+happyIn49 x = unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn ) -> (Expr)
+happyOut49 x = unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: ((AssignOp, Expr)) -> (HappyAbsSyn )
+happyIn50 x = unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn ) -> ((AssignOp, Expr))
+happyOut50 x = unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (AssignOp) -> (HappyAbsSyn )
+happyIn51 x = unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn ) -> (AssignOp)
+happyOut51 x = unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (Statement) -> (HappyAbsSyn )
+happyIn52 x = unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn ) -> (Statement)
+happyOut52 x = unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: (Statement) -> (HappyAbsSyn )
+happyIn53 x = unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn ) -> (Statement)
+happyOut53 x = unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: (Statement) -> (HappyAbsSyn )
+happyIn54 x = unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn ) -> (Statement)
+happyOut54 x = unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: (Statement) -> (HappyAbsSyn )
+happyIn55 x = unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn ) -> (Statement)
+happyOut55 x = unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: (Statement) -> (HappyAbsSyn )
+happyIn56 x = unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn ) -> (Statement)
+happyOut56 x = unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: (Statement) -> (HappyAbsSyn )
+happyIn57 x = unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn ) -> (Statement)
+happyOut57 x = unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: (Statement) -> (HappyAbsSyn )
+happyIn58 x = unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn ) -> (Statement)
+happyOut58 x = unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: (Statement) -> (HappyAbsSyn )
+happyIn59 x = unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn ) -> (Statement)
+happyOut59 x = unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: (Maybe (Expr, Maybe Expr)) -> (HappyAbsSyn )
+happyIn60 x = unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn ) -> (Maybe (Expr, Maybe Expr))
+happyOut60 x = unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn61 x = unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut61 x = unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: (Statement) -> (HappyAbsSyn )
+happyIn62 x = unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn ) -> (Statement)
+happyOut62 x = unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: (Statement) -> (HappyAbsSyn )
+happyIn63 x = unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn ) -> (Statement)
+happyOut63 x = unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: (FromItems) -> (HappyAbsSyn )
+happyIn64 x = unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn ) -> (FromItems)
+happyOut64 x = unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: (ImportModule) -> (HappyAbsSyn )
+happyIn65 x = unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn ) -> (ImportModule)
+happyOut65 x = unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: (FromItem) -> (HappyAbsSyn )
+happyIn66 x = unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn ) -> (FromItem)
+happyOut66 x = unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyIn67 :: (FromItems) -> (HappyAbsSyn )
+happyIn67 x = unsafeCoerce# x
+{-# INLINE happyIn67 #-}
+happyOut67 :: (HappyAbsSyn ) -> (FromItems)
+happyOut67 x = unsafeCoerce# x
+{-# INLINE happyOut67 #-}
+happyIn68 :: ([FromItem]) -> (HappyAbsSyn )
+happyIn68 x = unsafeCoerce# x
+{-# INLINE happyIn68 #-}
+happyOut68 :: (HappyAbsSyn ) -> ([FromItem])
+happyOut68 x = unsafeCoerce# x
+{-# INLINE happyOut68 #-}
+happyIn69 :: (Statement) -> (HappyAbsSyn )
+happyIn69 x = unsafeCoerce# x
+{-# INLINE happyIn69 #-}
+happyOut69 :: (HappyAbsSyn ) -> (Statement)
+happyOut69 x = unsafeCoerce# x
+{-# INLINE happyOut69 #-}
+happyIn70 :: ([ImportItem]) -> (HappyAbsSyn )
+happyIn70 x = unsafeCoerce# x
+{-# INLINE happyIn70 #-}
+happyOut70 :: (HappyAbsSyn ) -> ([ImportItem])
+happyOut70 x = unsafeCoerce# x
+{-# INLINE happyOut70 #-}
+happyIn71 :: ([ImportItem]) -> (HappyAbsSyn )
+happyIn71 x = unsafeCoerce# x
+{-# INLINE happyIn71 #-}
+happyOut71 :: (HappyAbsSyn ) -> ([ImportItem])
+happyOut71 x = unsafeCoerce# x
+{-# INLINE happyOut71 #-}
+happyIn72 :: (ImportItem) -> (HappyAbsSyn )
+happyIn72 x = unsafeCoerce# x
+{-# INLINE happyIn72 #-}
+happyOut72 :: (HappyAbsSyn ) -> (ImportItem)
+happyOut72 x = unsafeCoerce# x
+{-# INLINE happyOut72 #-}
+happyIn73 :: (DottedName) -> (HappyAbsSyn )
+happyIn73 x = unsafeCoerce# x
+{-# INLINE happyIn73 #-}
+happyOut73 :: (HappyAbsSyn ) -> (DottedName)
+happyOut73 x = unsafeCoerce# x
+{-# INLINE happyOut73 #-}
+happyIn74 :: (DottedName) -> (HappyAbsSyn )
+happyIn74 x = unsafeCoerce# x
+{-# INLINE happyIn74 #-}
+happyOut74 :: (HappyAbsSyn ) -> (DottedName)
+happyOut74 x = unsafeCoerce# x
+{-# INLINE happyOut74 #-}
+happyIn75 :: (Statement) -> (HappyAbsSyn )
+happyIn75 x = unsafeCoerce# x
+{-# INLINE happyIn75 #-}
+happyOut75 :: (HappyAbsSyn ) -> (Statement)
+happyOut75 x = unsafeCoerce# x
+{-# INLINE happyOut75 #-}
+happyIn76 :: ([Ident]) -> (HappyAbsSyn )
+happyIn76 x = unsafeCoerce# x
+{-# INLINE happyIn76 #-}
+happyOut76 :: (HappyAbsSyn ) -> ([Ident])
+happyOut76 x = unsafeCoerce# x
+{-# INLINE happyOut76 #-}
+happyIn77 :: ([Ident]) -> (HappyAbsSyn )
+happyIn77 x = unsafeCoerce# x
+{-# INLINE happyIn77 #-}
+happyOut77 :: (HappyAbsSyn ) -> ([Ident])
+happyOut77 x = unsafeCoerce# x
+{-# INLINE happyOut77 #-}
+happyIn78 :: (Statement) -> (HappyAbsSyn )
+happyIn78 x = unsafeCoerce# x
+{-# INLINE happyIn78 #-}
+happyOut78 :: (HappyAbsSyn ) -> (Statement)
+happyOut78 x = unsafeCoerce# x
+{-# INLINE happyOut78 #-}
+happyIn79 :: (Statement) -> (HappyAbsSyn )
+happyIn79 x = unsafeCoerce# x
+{-# INLINE happyIn79 #-}
+happyOut79 :: (HappyAbsSyn ) -> (Statement)
+happyOut79 x = unsafeCoerce# x
+{-# INLINE happyOut79 #-}
+happyIn80 :: (Statement) -> (HappyAbsSyn )
+happyIn80 x = unsafeCoerce# x
+{-# INLINE happyIn80 #-}
+happyOut80 :: (HappyAbsSyn ) -> (Statement)
+happyOut80 x = unsafeCoerce# x
+{-# INLINE happyOut80 #-}
+happyIn81 :: (Statement) -> (HappyAbsSyn )
+happyIn81 x = unsafeCoerce# x
+{-# INLINE happyIn81 #-}
+happyOut81 :: (HappyAbsSyn ) -> (Statement)
+happyOut81 x = unsafeCoerce# x
+{-# INLINE happyOut81 #-}
+happyIn82 :: ([(Expr,[Statement])]) -> (HappyAbsSyn )
+happyIn82 x = unsafeCoerce# x
+{-# INLINE happyIn82 #-}
+happyOut82 :: (HappyAbsSyn ) -> ([(Expr,[Statement])])
+happyOut82 x = unsafeCoerce# x
+{-# INLINE happyOut82 #-}
+happyIn83 :: ((Expr, [Statement])) -> (HappyAbsSyn )
+happyIn83 x = unsafeCoerce# x
+{-# INLINE happyIn83 #-}
+happyOut83 :: (HappyAbsSyn ) -> ((Expr, [Statement]))
+happyOut83 x = unsafeCoerce# x
+{-# INLINE happyOut83 #-}
+happyIn84 :: ([(Expr, [Statement])]) -> (HappyAbsSyn )
+happyIn84 x = unsafeCoerce# x
+{-# INLINE happyIn84 #-}
+happyOut84 :: (HappyAbsSyn ) -> ([(Expr, [Statement])])
+happyOut84 x = unsafeCoerce# x
+{-# INLINE happyOut84 #-}
+happyIn85 :: ([(Expr, [Statement])]) -> (HappyAbsSyn )
+happyIn85 x = unsafeCoerce# x
+{-# INLINE happyIn85 #-}
+happyOut85 :: (HappyAbsSyn ) -> ([(Expr, [Statement])])
+happyOut85 x = unsafeCoerce# x
+{-# INLINE happyOut85 #-}
+happyIn86 :: ([Statement]) -> (HappyAbsSyn )
+happyIn86 x = unsafeCoerce# x
+{-# INLINE happyIn86 #-}
+happyOut86 :: (HappyAbsSyn ) -> ([Statement])
+happyOut86 x = unsafeCoerce# x
+{-# INLINE happyOut86 #-}
+happyIn87 :: (Statement) -> (HappyAbsSyn )
+happyIn87 x = unsafeCoerce# x
+{-# INLINE happyIn87 #-}
+happyOut87 :: (HappyAbsSyn ) -> (Statement)
+happyOut87 x = unsafeCoerce# x
+{-# INLINE happyOut87 #-}
+happyIn88 :: (Statement) -> (HappyAbsSyn )
+happyIn88 x = unsafeCoerce# x
+{-# INLINE happyIn88 #-}
+happyOut88 :: (HappyAbsSyn ) -> (Statement)
+happyOut88 x = unsafeCoerce# x
+{-# INLINE happyOut88 #-}
+happyIn89 :: (Statement) -> (HappyAbsSyn )
+happyIn89 x = unsafeCoerce# x
+{-# INLINE happyIn89 #-}
+happyOut89 :: (HappyAbsSyn ) -> (Statement)
+happyOut89 x = unsafeCoerce# x
+{-# INLINE happyOut89 #-}
+happyIn90 :: (([Handler], [Statement], [Statement])) -> (HappyAbsSyn )
+happyIn90 x = unsafeCoerce# x
+{-# INLINE happyIn90 #-}
+happyOut90 :: (HappyAbsSyn ) -> (([Handler], [Statement], [Statement]))
+happyOut90 x = unsafeCoerce# x
+{-# INLINE happyOut90 #-}
+happyIn91 :: ([Statement]) -> (HappyAbsSyn )
+happyIn91 x = unsafeCoerce# x
+{-# INLINE happyIn91 #-}
+happyOut91 :: (HappyAbsSyn ) -> ([Statement])
+happyOut91 x = unsafeCoerce# x
+{-# INLINE happyOut91 #-}
+happyIn92 :: ([Handler]) -> (HappyAbsSyn )
+happyIn92 x = unsafeCoerce# x
+{-# INLINE happyIn92 #-}
+happyOut92 :: (HappyAbsSyn ) -> ([Handler])
+happyOut92 x = unsafeCoerce# x
+{-# INLINE happyOut92 #-}
+happyIn93 :: ([Handler]) -> (HappyAbsSyn )
+happyIn93 x = unsafeCoerce# x
+{-# INLINE happyIn93 #-}
+happyOut93 :: (HappyAbsSyn ) -> ([Handler])
+happyOut93 x = unsafeCoerce# x
+{-# INLINE happyOut93 #-}
+happyIn94 :: (Handler) -> (HappyAbsSyn )
+happyIn94 x = unsafeCoerce# x
+{-# INLINE happyIn94 #-}
+happyOut94 :: (HappyAbsSyn ) -> (Handler)
+happyOut94 x = unsafeCoerce# x
+{-# INLINE happyOut94 #-}
+happyIn95 :: (Statement) -> (HappyAbsSyn )
+happyIn95 x = unsafeCoerce# x
+{-# INLINE happyIn95 #-}
+happyOut95 :: (HappyAbsSyn ) -> (Statement)
+happyOut95 x = unsafeCoerce# x
+{-# INLINE happyOut95 #-}
+happyIn96 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn96 x = unsafeCoerce# x
+{-# INLINE happyIn96 #-}
+happyOut96 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut96 x = unsafeCoerce# x
+{-# INLINE happyOut96 #-}
+happyIn97 :: (ExceptClause) -> (HappyAbsSyn )
+happyIn97 x = unsafeCoerce# x
+{-# INLINE happyIn97 #-}
+happyOut97 :: (HappyAbsSyn ) -> (ExceptClause)
+happyOut97 x = unsafeCoerce# x
+{-# INLINE happyOut97 #-}
+happyIn98 :: (ExceptClause) -> (HappyAbsSyn )
+happyIn98 x = unsafeCoerce# x
+{-# INLINE happyIn98 #-}
+happyOut98 :: (HappyAbsSyn ) -> (ExceptClause)
+happyOut98 x = unsafeCoerce# x
+{-# INLINE happyOut98 #-}
+happyIn99 :: (Maybe Ident) -> (HappyAbsSyn )
+happyIn99 x = unsafeCoerce# x
+{-# INLINE happyIn99 #-}
+happyOut99 :: (HappyAbsSyn ) -> (Maybe Ident)
+happyOut99 x = unsafeCoerce# x
+{-# INLINE happyOut99 #-}
+happyIn100 :: ([Statement]) -> (HappyAbsSyn )
+happyIn100 x = unsafeCoerce# x
+{-# INLINE happyIn100 #-}
+happyOut100 :: (HappyAbsSyn ) -> ([Statement])
+happyOut100 x = unsafeCoerce# x
+{-# INLINE happyOut100 #-}
+happyIn101 :: ([Statement]) -> (HappyAbsSyn )
+happyIn101 x = unsafeCoerce# x
+{-# INLINE happyIn101 #-}
+happyOut101 :: (HappyAbsSyn ) -> ([Statement])
+happyOut101 x = unsafeCoerce# x
+{-# INLINE happyOut101 #-}
+happyIn102 :: ([[Statement]]) -> (HappyAbsSyn )
+happyIn102 x = unsafeCoerce# x
+{-# INLINE happyIn102 #-}
+happyOut102 :: (HappyAbsSyn ) -> ([[Statement]])
+happyOut102 x = unsafeCoerce# x
+{-# INLINE happyOut102 #-}
+happyIn103 :: (Expr) -> (HappyAbsSyn )
+happyIn103 x = unsafeCoerce# x
+{-# INLINE happyIn103 #-}
+happyOut103 :: (HappyAbsSyn ) -> (Expr)
+happyOut103 x = unsafeCoerce# x
+{-# INLINE happyOut103 #-}
+happyIn104 :: (Maybe (Expr, Expr)) -> (HappyAbsSyn )
+happyIn104 x = unsafeCoerce# x
+{-# INLINE happyIn104 #-}
+happyOut104 :: (HappyAbsSyn ) -> (Maybe (Expr, Expr))
+happyOut104 x = unsafeCoerce# x
+{-# INLINE happyOut104 #-}
+happyIn105 :: (Expr) -> (HappyAbsSyn )
+happyIn105 x = unsafeCoerce# x
+{-# INLINE happyIn105 #-}
+happyOut105 :: (HappyAbsSyn ) -> (Expr)
+happyOut105 x = unsafeCoerce# x
+{-# INLINE happyOut105 #-}
+happyIn106 :: (Expr) -> (HappyAbsSyn )
+happyIn106 x = unsafeCoerce# x
+{-# INLINE happyIn106 #-}
+happyOut106 :: (HappyAbsSyn ) -> (Expr)
+happyOut106 x = unsafeCoerce# x
+{-# INLINE happyOut106 #-}
+happyIn107 :: (Expr) -> (HappyAbsSyn )
+happyIn107 x = unsafeCoerce# x
+{-# INLINE happyIn107 #-}
+happyOut107 :: (HappyAbsSyn ) -> (Expr)
+happyOut107 x = unsafeCoerce# x
+{-# INLINE happyOut107 #-}
+happyIn108 :: (Expr) -> (HappyAbsSyn )
+happyIn108 x = unsafeCoerce# x
+{-# INLINE happyIn108 #-}
+happyOut108 :: (HappyAbsSyn ) -> (Expr)
+happyOut108 x = unsafeCoerce# x
+{-# INLINE happyOut108 #-}
+happyIn109 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn109 x = unsafeCoerce# x
+{-# INLINE happyIn109 #-}
+happyOut109 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut109 x = unsafeCoerce# x
+{-# INLINE happyOut109 #-}
+happyIn110 :: (Expr) -> (HappyAbsSyn )
+happyIn110 x = unsafeCoerce# x
+{-# INLINE happyIn110 #-}
+happyOut110 :: (HappyAbsSyn ) -> (Expr)
+happyOut110 x = unsafeCoerce# x
+{-# INLINE happyOut110 #-}
+happyIn111 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn111 x = unsafeCoerce# x
+{-# INLINE happyIn111 #-}
+happyOut111 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut111 x = unsafeCoerce# x
+{-# INLINE happyOut111 #-}
+happyIn112 :: (Expr) -> (HappyAbsSyn )
+happyIn112 x = unsafeCoerce# x
+{-# INLINE happyIn112 #-}
+happyOut112 :: (HappyAbsSyn ) -> (Expr)
+happyOut112 x = unsafeCoerce# x
+{-# INLINE happyOut112 #-}
+happyIn113 :: (Expr) -> (HappyAbsSyn )
+happyIn113 x = unsafeCoerce# x
+{-# INLINE happyIn113 #-}
+happyOut113 :: (HappyAbsSyn ) -> (Expr)
+happyOut113 x = unsafeCoerce# x
+{-# INLINE happyOut113 #-}
+happyIn114 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn114 x = unsafeCoerce# x
+{-# INLINE happyIn114 #-}
+happyOut114 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut114 x = unsafeCoerce# x
+{-# INLINE happyOut114 #-}
+happyIn115 :: (Op) -> (HappyAbsSyn )
+happyIn115 x = unsafeCoerce# x
+{-# INLINE happyIn115 #-}
+happyOut115 :: (HappyAbsSyn ) -> (Op)
+happyOut115 x = unsafeCoerce# x
+{-# INLINE happyOut115 #-}
+happyIn116 :: (Op) -> (HappyAbsSyn )
+happyIn116 x = unsafeCoerce# x
+{-# INLINE happyIn116 #-}
+happyOut116 :: (HappyAbsSyn ) -> (Op)
+happyOut116 x = unsafeCoerce# x
+{-# INLINE happyOut116 #-}
+happyIn117 :: (Op) -> (HappyAbsSyn )
+happyIn117 x = unsafeCoerce# x
+{-# INLINE happyIn117 #-}
+happyOut117 :: (HappyAbsSyn ) -> (Op)
+happyOut117 x = unsafeCoerce# x
+{-# INLINE happyOut117 #-}
+happyIn118 :: (Expr) -> (HappyAbsSyn )
+happyIn118 x = unsafeCoerce# x
+{-# INLINE happyIn118 #-}
+happyOut118 :: (HappyAbsSyn ) -> (Expr)
+happyOut118 x = unsafeCoerce# x
+{-# INLINE happyOut118 #-}
+happyIn119 :: (Expr) -> (HappyAbsSyn )
+happyIn119 x = unsafeCoerce# x
+{-# INLINE happyIn119 #-}
+happyOut119 :: (HappyAbsSyn ) -> (Expr)
+happyOut119 x = unsafeCoerce# x
+{-# INLINE happyOut119 #-}
+happyIn120 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn120 x = unsafeCoerce# x
+{-# INLINE happyIn120 #-}
+happyOut120 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut120 x = unsafeCoerce# x
+{-# INLINE happyOut120 #-}
+happyIn121 :: (Expr) -> (HappyAbsSyn )
+happyIn121 x = unsafeCoerce# x
+{-# INLINE happyIn121 #-}
+happyOut121 :: (HappyAbsSyn ) -> (Expr)
+happyOut121 x = unsafeCoerce# x
+{-# INLINE happyOut121 #-}
+happyIn122 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn122 x = unsafeCoerce# x
+{-# INLINE happyIn122 #-}
+happyOut122 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut122 x = unsafeCoerce# x
+{-# INLINE happyOut122 #-}
+happyIn123 :: (Expr) -> (HappyAbsSyn )
+happyIn123 x = unsafeCoerce# x
+{-# INLINE happyIn123 #-}
+happyOut123 :: (HappyAbsSyn ) -> (Expr)
+happyOut123 x = unsafeCoerce# x
+{-# INLINE happyOut123 #-}
+happyIn124 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn124 x = unsafeCoerce# x
+{-# INLINE happyIn124 #-}
+happyOut124 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut124 x = unsafeCoerce# x
+{-# INLINE happyOut124 #-}
+happyIn125 :: (Expr) -> (HappyAbsSyn )
+happyIn125 x = unsafeCoerce# x
+{-# INLINE happyIn125 #-}
+happyOut125 :: (HappyAbsSyn ) -> (Expr)
+happyOut125 x = unsafeCoerce# x
+{-# INLINE happyOut125 #-}
+happyIn126 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn126 x = unsafeCoerce# x
+{-# INLINE happyIn126 #-}
+happyOut126 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut126 x = unsafeCoerce# x
+{-# INLINE happyOut126 #-}
+happyIn127 :: (Op) -> (HappyAbsSyn )
+happyIn127 x = unsafeCoerce# x
+{-# INLINE happyIn127 #-}
+happyOut127 :: (HappyAbsSyn ) -> (Op)
+happyOut127 x = unsafeCoerce# x
+{-# INLINE happyOut127 #-}
+happyIn128 :: (Expr) -> (HappyAbsSyn )
+happyIn128 x = unsafeCoerce# x
+{-# INLINE happyIn128 #-}
+happyOut128 :: (HappyAbsSyn ) -> (Expr)
+happyOut128 x = unsafeCoerce# x
+{-# INLINE happyOut128 #-}
+happyIn129 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn129 x = unsafeCoerce# x
+{-# INLINE happyIn129 #-}
+happyOut129 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut129 x = unsafeCoerce# x
+{-# INLINE happyOut129 #-}
+happyIn130 :: (Op) -> (HappyAbsSyn )
+happyIn130 x = unsafeCoerce# x
+{-# INLINE happyIn130 #-}
+happyOut130 :: (HappyAbsSyn ) -> (Op)
+happyOut130 x = unsafeCoerce# x
+{-# INLINE happyOut130 #-}
+happyIn131 :: (Expr) -> (HappyAbsSyn )
+happyIn131 x = unsafeCoerce# x
+{-# INLINE happyIn131 #-}
+happyOut131 :: (HappyAbsSyn ) -> (Expr)
+happyOut131 x = unsafeCoerce# x
+{-# INLINE happyOut131 #-}
+happyIn132 :: ([(Op, Expr)]) -> (HappyAbsSyn )
+happyIn132 x = unsafeCoerce# x
+{-# INLINE happyIn132 #-}
+happyOut132 :: (HappyAbsSyn ) -> ([(Op, Expr)])
+happyOut132 x = unsafeCoerce# x
+{-# INLINE happyOut132 #-}
+happyIn133 :: (Op) -> (HappyAbsSyn )
+happyIn133 x = unsafeCoerce# x
+{-# INLINE happyIn133 #-}
+happyOut133 :: (HappyAbsSyn ) -> (Op)
+happyOut133 x = unsafeCoerce# x
+{-# INLINE happyOut133 #-}
+happyIn134 :: (Expr) -> (HappyAbsSyn )
+happyIn134 x = unsafeCoerce# x
+{-# INLINE happyIn134 #-}
+happyOut134 :: (HappyAbsSyn ) -> (Expr)
+happyOut134 x = unsafeCoerce# x
+{-# INLINE happyOut134 #-}
+happyIn135 :: (Expr) -> (HappyAbsSyn )
+happyIn135 x = unsafeCoerce# x
+{-# INLINE happyIn135 #-}
+happyOut135 :: (HappyAbsSyn ) -> (Expr)
+happyOut135 x = unsafeCoerce# x
+{-# INLINE happyOut135 #-}
+happyIn136 :: ([Trailer]) -> (HappyAbsSyn )
+happyIn136 x = unsafeCoerce# x
+{-# INLINE happyIn136 #-}
+happyOut136 :: (HappyAbsSyn ) -> ([Trailer])
+happyOut136 x = unsafeCoerce# x
+{-# INLINE happyOut136 #-}
+happyIn137 :: ([Trailer]) -> (HappyAbsSyn )
+happyIn137 x = unsafeCoerce# x
+{-# INLINE happyIn137 #-}
+happyOut137 :: (HappyAbsSyn ) -> ([Trailer])
+happyOut137 x = unsafeCoerce# x
+{-# INLINE happyOut137 #-}
+happyIn138 :: (Expr) -> (HappyAbsSyn )
+happyIn138 x = unsafeCoerce# x
+{-# INLINE happyIn138 #-}
+happyOut138 :: (HappyAbsSyn ) -> (Expr)
+happyOut138 x = unsafeCoerce# x
+{-# INLINE happyOut138 #-}
+happyIn139 :: (Expr) -> (HappyAbsSyn )
+happyIn139 x = unsafeCoerce# x
+{-# INLINE happyIn139 #-}
+happyOut139 :: (HappyAbsSyn ) -> (Expr)
+happyOut139 x = unsafeCoerce# x
+{-# INLINE happyOut139 #-}
+happyIn140 :: (Expr) -> (HappyAbsSyn )
+happyIn140 x = unsafeCoerce# x
+{-# INLINE happyIn140 #-}
+happyOut140 :: (HappyAbsSyn ) -> (Expr)
+happyOut140 x = unsafeCoerce# x
+{-# INLINE happyOut140 #-}
+happyIn141 :: (Expr) -> (HappyAbsSyn )
+happyIn141 x = unsafeCoerce# x
+{-# INLINE happyIn141 #-}
+happyOut141 :: (HappyAbsSyn ) -> (Expr)
+happyOut141 x = unsafeCoerce# x
+{-# INLINE happyOut141 #-}
+happyIn142 :: (Expr) -> (HappyAbsSyn )
+happyIn142 x = unsafeCoerce# x
+{-# INLINE happyIn142 #-}
+happyOut142 :: (HappyAbsSyn ) -> (Expr)
+happyOut142 x = unsafeCoerce# x
+{-# INLINE happyOut142 #-}
+happyIn143 :: ([String]) -> (HappyAbsSyn )
+happyIn143 x = unsafeCoerce# x
+{-# INLINE happyIn143 #-}
+happyOut143 :: (HappyAbsSyn ) -> ([String])
+happyOut143 x = unsafeCoerce# x
+{-# INLINE happyOut143 #-}
+happyIn144 :: ([BS.ByteString]) -> (HappyAbsSyn )
+happyIn144 x = unsafeCoerce# x
+{-# INLINE happyIn144 #-}
+happyOut144 :: (HappyAbsSyn ) -> ([BS.ByteString])
+happyOut144 x = unsafeCoerce# x
+{-# INLINE happyOut144 #-}
+happyIn145 :: (Either Expr (Comprehension Expr)) -> (HappyAbsSyn )
+happyIn145 x = unsafeCoerce# x
+{-# INLINE happyIn145 #-}
+happyOut145 :: (HappyAbsSyn ) -> (Either Expr (Comprehension Expr))
+happyOut145 x = unsafeCoerce# x
+{-# INLINE happyOut145 #-}
+happyIn146 :: (Trailer) -> (HappyAbsSyn )
+happyIn146 x = unsafeCoerce# x
+{-# INLINE happyIn146 #-}
+happyOut146 :: (HappyAbsSyn ) -> (Trailer)
+happyOut146 x = unsafeCoerce# x
+{-# INLINE happyOut146 #-}
+happyIn147 :: ([Subscript]) -> (HappyAbsSyn )
+happyIn147 x = unsafeCoerce# x
+{-# INLINE happyIn147 #-}
+happyOut147 :: (HappyAbsSyn ) -> ([Subscript])
+happyOut147 x = unsafeCoerce# x
+{-# INLINE happyOut147 #-}
+happyIn148 :: ([Subscript]) -> (HappyAbsSyn )
+happyIn148 x = unsafeCoerce# x
+{-# INLINE happyIn148 #-}
+happyOut148 :: (HappyAbsSyn ) -> ([Subscript])
+happyOut148 x = unsafeCoerce# x
+{-# INLINE happyOut148 #-}
+happyIn149 :: (Subscript) -> (HappyAbsSyn )
+happyIn149 x = unsafeCoerce# x
+{-# INLINE happyIn149 #-}
+happyOut149 :: (HappyAbsSyn ) -> (Subscript)
+happyOut149 x = unsafeCoerce# x
+{-# INLINE happyOut149 #-}
+happyIn150 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn150 x = unsafeCoerce# x
+{-# INLINE happyIn150 #-}
+happyOut150 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut150 x = unsafeCoerce# x
+{-# INLINE happyOut150 #-}
+happyIn151 :: (Maybe (Maybe Expr)) -> (HappyAbsSyn )
+happyIn151 x = unsafeCoerce# x
+{-# INLINE happyIn151 #-}
+happyOut151 :: (HappyAbsSyn ) -> (Maybe (Maybe Expr))
+happyOut151 x = unsafeCoerce# x
+{-# INLINE happyOut151 #-}
+happyIn152 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn152 x = unsafeCoerce# x
+{-# INLINE happyIn152 #-}
+happyOut152 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut152 x = unsafeCoerce# x
+{-# INLINE happyOut152 #-}
+happyIn153 :: ([Expr]) -> (HappyAbsSyn )
+happyIn153 x = unsafeCoerce# x
+{-# INLINE happyIn153 #-}
+happyOut153 :: (HappyAbsSyn ) -> ([Expr])
+happyOut153 x = unsafeCoerce# x
+{-# INLINE happyOut153 #-}
+happyIn154 :: (Bool) -> (HappyAbsSyn )
+happyIn154 x = unsafeCoerce# x
+{-# INLINE happyIn154 #-}
+happyOut154 :: (HappyAbsSyn ) -> (Bool)
+happyOut154 x = unsafeCoerce# x
+{-# INLINE happyOut154 #-}
+happyIn155 :: ([Expr]) -> (HappyAbsSyn )
+happyIn155 x = unsafeCoerce# x
+{-# INLINE happyIn155 #-}
+happyOut155 :: (HappyAbsSyn ) -> ([Expr])
+happyOut155 x = unsafeCoerce# x
+{-# INLINE happyOut155 #-}
+happyIn156 :: (Expr) -> (HappyAbsSyn )
+happyIn156 x = unsafeCoerce# x
+{-# INLINE happyIn156 #-}
+happyOut156 :: (HappyAbsSyn ) -> (Expr)
+happyOut156 x = unsafeCoerce# x
+{-# INLINE happyOut156 #-}
+happyIn157 :: ([Expr]) -> (HappyAbsSyn )
+happyIn157 x = unsafeCoerce# x
+{-# INLINE happyIn157 #-}
+happyOut157 :: (HappyAbsSyn ) -> ([Expr])
+happyOut157 x = unsafeCoerce# x
+{-# INLINE happyOut157 #-}
+happyIn158 :: (Expr) -> (HappyAbsSyn )
+happyIn158 x = unsafeCoerce# x
+{-# INLINE happyIn158 #-}
+happyOut158 :: (HappyAbsSyn ) -> (Expr)
+happyOut158 x = unsafeCoerce# x
+{-# INLINE happyOut158 #-}
+happyIn159 :: (Either CompFor [(Expr, Expr)]) -> (HappyAbsSyn )
+happyIn159 x = unsafeCoerce# x
+{-# INLINE happyIn159 #-}
+happyOut159 :: (HappyAbsSyn ) -> (Either CompFor [(Expr, Expr)])
+happyOut159 x = unsafeCoerce# x
+{-# INLINE happyOut159 #-}
+happyIn160 :: ([(Expr, Expr)]) -> (HappyAbsSyn )
+happyIn160 x = unsafeCoerce# x
+{-# INLINE happyIn160 #-}
+happyOut160 :: (HappyAbsSyn ) -> ([(Expr, Expr)])
+happyOut160 x = unsafeCoerce# x
+{-# INLINE happyOut160 #-}
+happyIn161 :: (Either CompFor [Expr]) -> (HappyAbsSyn )
+happyIn161 x = unsafeCoerce# x
+{-# INLINE happyIn161 #-}
+happyOut161 :: (HappyAbsSyn ) -> (Either CompFor [Expr])
+happyOut161 x = unsafeCoerce# x
+{-# INLINE happyOut161 #-}
+happyIn162 :: ([Expr]) -> (HappyAbsSyn )
+happyIn162 x = unsafeCoerce# x
+{-# INLINE happyIn162 #-}
+happyOut162 :: (HappyAbsSyn ) -> ([Expr])
+happyOut162 x = unsafeCoerce# x
+{-# INLINE happyOut162 #-}
+happyIn163 :: (Statement) -> (HappyAbsSyn )
+happyIn163 x = unsafeCoerce# x
+{-# INLINE happyIn163 #-}
+happyOut163 :: (HappyAbsSyn ) -> (Statement)
+happyOut163 x = unsafeCoerce# x
+{-# INLINE happyOut163 #-}
+happyIn164 :: ([Argument]) -> (HappyAbsSyn )
+happyIn164 x = unsafeCoerce# x
+{-# INLINE happyIn164 #-}
+happyOut164 :: (HappyAbsSyn ) -> ([Argument])
+happyOut164 x = unsafeCoerce# x
+{-# INLINE happyOut164 #-}
+happyIn165 :: ([Argument]) -> (HappyAbsSyn )
+happyIn165 x = unsafeCoerce# x
+{-# INLINE happyIn165 #-}
+happyOut165 :: (HappyAbsSyn ) -> ([Argument])
+happyOut165 x = unsafeCoerce# x
+{-# INLINE happyOut165 #-}
+happyIn166 :: ([Argument]) -> (HappyAbsSyn )
+happyIn166 x = unsafeCoerce# x
+{-# INLINE happyIn166 #-}
+happyOut166 :: (HappyAbsSyn ) -> ([Argument])
+happyOut166 x = unsafeCoerce# x
+{-# INLINE happyOut166 #-}
+happyIn167 :: (Argument) -> (HappyAbsSyn )
+happyIn167 x = unsafeCoerce# x
+{-# INLINE happyIn167 #-}
+happyOut167 :: (HappyAbsSyn ) -> (Argument)
+happyOut167 x = unsafeCoerce# x
+{-# INLINE happyOut167 #-}
+happyIn168 :: (CompIter) -> (HappyAbsSyn )
+happyIn168 x = unsafeCoerce# x
+{-# INLINE happyIn168 #-}
+happyOut168 :: (HappyAbsSyn ) -> (CompIter)
+happyOut168 x = unsafeCoerce# x
+{-# INLINE happyOut168 #-}
+happyIn169 :: (CompFor) -> (HappyAbsSyn )
+happyIn169 x = unsafeCoerce# x
+{-# INLINE happyIn169 #-}
+happyOut169 :: (HappyAbsSyn ) -> (CompFor)
+happyOut169 x = unsafeCoerce# x
+{-# INLINE happyOut169 #-}
+happyIn170 :: (Maybe CompIter) -> (HappyAbsSyn )
+happyIn170 x = unsafeCoerce# x
+{-# INLINE happyIn170 #-}
+happyOut170 :: (HappyAbsSyn ) -> (Maybe CompIter)
+happyOut170 x = unsafeCoerce# x
+{-# INLINE happyOut170 #-}
+happyIn171 :: (CompIf) -> (HappyAbsSyn )
+happyIn171 x = unsafeCoerce# x
+{-# INLINE happyIn171 #-}
+happyOut171 :: (HappyAbsSyn ) -> (CompIf)
+happyOut171 x = unsafeCoerce# x
+{-# INLINE happyOut171 #-}
+happyIn172 :: (Expr) -> (HappyAbsSyn )
+happyIn172 x = unsafeCoerce# x
+{-# INLINE happyIn172 #-}
+happyOut172 :: (HappyAbsSyn ) -> (Expr)
+happyOut172 x = unsafeCoerce# x
+{-# INLINE happyOut172 #-}
+happyIn173 :: (Maybe Expr) -> (HappyAbsSyn )
+happyIn173 x = unsafeCoerce# x
+{-# INLINE happyIn173 #-}
+happyOut173 :: (HappyAbsSyn ) -> (Maybe Expr)
+happyOut173 x = unsafeCoerce# x
+{-# INLINE happyOut173 #-}
+happyInTok :: Token -> (HappyAbsSyn )
+happyInTok x = unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn ) -> Token
+happyOutTok x = unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x00\x00\xb4\x0f\x52\x12\xa8\x02\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\xb1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x02\xbd\x02\x00\x00\xb0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x11\x8f\x11\x68\x11\x00\x00\x00\x00\x00\x00\x12\x00\x12\x00\x79\x12\x12\x00\x3d\x00\x00\x00\x62\x02\x00\x00\x5e\x01\x64\x02\x00\x00\x00\x00\x00\x00\xa5\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x06\x00\x00\x00\x00\xaf\x02\xaf\x02\xaf\x02\x52\x12\x12\x00\x52\x12\x52\x12\x52\x12\x52\x12\x9e\x02\x52\x12\x00\x00\x00\x00\x00\x00\x12\x00\xaa\x02\x03\x00\xaa\x02\xaa\x02\x52\x12\x52\x02\x00\x00\x6e\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x02\x00\x00\x00\x00\x9a\x02\x00\x00\x00\x00\xa6\x02\x00\x00\x03\x00\x03\x00\x9c\x02\x00\x00\x00\x00\x92\x02\x00\x00\x4c\x02\x40\x10\x00\x00\x00\x00\x00\x00\x80\x02\x8e\x02\x5b\x02\x89\x02\x8d\x02\x8c\x02\x00\x00\x84\x02\x00\x00\x78\x02\x00\x00\x00\x00\x87\x02\x00\x00\x41\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x02\x00\x00\x76\x02\x63\x02\x85\x10\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x00\x00\x6f\x02\x6e\x02\x00\x00\x72\x02\x00\x00\x77\x02\x77\x02\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x69\x02\x00\x00\x61\x02\x68\x02\x00\x00\x00\x00\x67\x02\x00\x00\x00\x00\x00\x00\x52\x12\x4f\x02\x00\x00\x00\x00\x43\x02\x11\x00\xcd\x00\x1f\x01\xfb\x00\x30\x02\x29\x02\x31\x02\x83\x06\x3f\x02\x35\x02\x00\x00\x79\x12\x2b\x02\x79\x12\x79\x12\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x02\x00\x00\x00\x00\x26\x02\x12\x00\x12\x00\x12\x00\x12\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x10\x52\x12\x57\x02\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x41\x02\x00\x00\x52\x12\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x2c\x00\x3d\x00\x52\x12\x00\x00\x00\x00\x40\x10\x52\x12\x00\x00\x00\x00\x00\x00\x41\x11\x00\x00\x4a\x02\x4a\x02\x00\x02\x3a\x00\x3e\x02\xbc\x10\x40\x10\x52\x12\x40\x10\x3c\x02\x12\x00\x00\x00\xff\x00\xfa\x0f\x00\x00\x52\x12\x00\x00\x12\x00\x2a\x02\x00\x00\x00\x00\x39\x00\x05\x02\x45\x02\x52\x12\x00\x00\x45\x02\x2d\x02\x00\x00\x00\x00\x00\x00\x34\x02\x3b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x02\xfa\x0f\x00\x00\x0a\x02\x11\x02\x00\x00\x27\x02\x52\x12\x25\x02\x00\x00\x40\x10\x00\x00\x23\x02\x09\x02\x28\x02\x1a\x02\x24\x02\x1e\x02\x52\x12\x52\x12\x40\x10\x22\x02\x00\x00\x1f\x02\x13\x02\x12\x02\x00\x00\x06\x02\x08\x02\x08\x02\x02\x02\x52\x12\x00\x00\x00\x00\x00\x00\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x03\x02\x00\x00\x00\x00\x01\x02\x00\x00\x52\x12\xcc\x01\x00\x00\x00\x00\xfe\x01\xfc\x01\xfd\x01\x00\x00\xf5\x01\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x00\x00\x00\x00\x52\x12\x00\x00\x1a\x11\x00\x00\x79\x12\x00\x00\x00\x00\xf3\x01\x00\x00\x2c\x00\x40\x10\x00\x00\x40\x10\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\x0e\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xbc\x10\x00\x00\x00\x00\x52\x12\x00\x00\x40\x10\x00\x00\x40\x10\x00\x00\xe8\x01\x40\x10\x00\x00\xda\x01\x00\x00\x00\x00\xf1\x01\x00\x00\xf7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\x00\x00\xeb\x10\x00\x00\x00\x00\xc9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x12\xfe\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x52\x12\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x12\xc4\x01\x0e\x00\x00\x00\xc5\x01\x04\x12\x00\x00\x40\x10\x00\x00\x00\x00\xeb\x10\x00\x00\x04\x12\xfe\x00\x00\x00\x00\x00\x28\x00\x00\x00\xc1\x01\x00\x00\x00\x00\x00\x00\xdd\x11\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\xe1\x01\x01\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x01\x68\x01\x58\x01\x00\x00\x4c\x01\x00\x00\x41\x01\x36\x01\x3a\x01\x22\x01\x2c\x01\x18\x01\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x07\x6a\x09\x40\x09\x00\x00\x00\x00\x00\x00\x21\x06\xb7\x05\xe4\x0e\x9f\x01\xd7\x01\x00\x00\x00\x00\x00\x00\xf8\xff\x80\x01\x00\x00\x00\x00\x00\x00\x60\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x01\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x00\x00\x00\x00\xf8\x00\x5f\x01\x5b\x01\x32\x0e\xa8\x03\x0b\x0e\xe4\x0d\x33\x02\xfb\x01\x00\x00\xd2\x0a\x00\x00\x00\x00\x00\x00\x3e\x03\x02\x00\x9d\x00\x47\x00\xfd\xff\xc8\x09\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x20\x00\xe6\xff\xcb\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x27\x01\x2b\x07\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\xb7\x00\x42\x01\x00\x00\x00\x00\x00\x00\xed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x01\x00\x00\xd1\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x91\x00\x82\x00\x81\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x7d\x0e\x00\x00\xa2\x0e\xc3\x0e\x7c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\xe6\x04\x50\x05\x1c\x00\x45\x00\x00\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x09\xf3\x09\xca\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x02\x00\x00\x00\x00\x34\x00\x00\x00\x96\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x0d\x95\x00\xe7\x00\x48\x0d\x00\x00\x00\x00\xc1\x06\x21\x0d\x00\x00\x00\x00\x00\x00\xf6\x07\x00\x00\x8b\x00\x58\x00\x9b\x00\x3c\x01\x00\x00\xe8\x08\x57\x06\x9e\x09\xed\x05\x00\x00\x6a\x02\x00\x00\x4b\x01\x0e\x01\x00\x00\xfa\x0c\x00\x00\x12\x04\x00\x00\x00\x00\x00\x00\x2e\x01\x00\x00\x83\x00\xd3\x0c\x00\x00\x68\x00\x66\x00\x00\x00\x00\x00\x00\x00\xe8\xff\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x01\x00\x00\x4f\x00\x92\x00\x00\x00\x00\x00\xab\x0a\x00\x00\x00\x00\x83\x05\x00\x00\x00\x00\x30\x00\x00\x00\xd2\xff\x00\x00\x00\x00\xac\x0c\x85\x0c\x19\x05\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x5c\x00\xf0\xff\x00\x00\x5e\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x37\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\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\x10\x0c\x00\x00\x00\x00\x7b\x0a\x00\x00\x23\x0a\x00\x00\x57\x0e\x00\x00\x00\x00\x91\xff\x00\x00\xf3\xff\xaf\x04\x00\x00\x45\x04\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x0b\xb9\x01\x65\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x08\x00\x00\x00\x00\xc2\x0b\x00\x00\xdb\x03\x00\x00\x71\x03\x00\x00\xc3\xff\x07\x03\x00\x00\xb7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xff\x00\x00\x00\x00\x87\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x0b\x1a\x01\x00\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x50\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x74\x0b\x00\x00\x78\x01\x00\x00\x00\x00\x4a\x0b\x00\x00\x9d\x02\x00\x00\x00\x00\x54\x08\x00\x00\x23\x0b\xc0\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x0a\x00\x00\x00\x00"#
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\xf7\xff\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x01\xff\xd6\xfe\x46\xff\x45\xff\x3e\xff\x3b\xff\x38\xff\x36\xff\x28\xff\x26\xff\x23\xff\x20\xff\x1d\xff\x18\xff\x13\xff\x0a\xff\x06\xff\x04\xff\x03\xff\x02\xff\xfd\xfe\xfc\xfe\xf2\xff\xdb\xfe\xc1\xff\xef\xfe\xed\xfe\x00\xff\xff\xfe\xfe\xfe\xf2\xfe\x00\x00\x00\x00\xf9\xfe\xf8\xfe\xfa\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xff\xfb\xfe\x00\x00\xee\xff\x00\x00\xef\xff\x68\xff\x6a\xff\xfb\xff\xbd\xff\xbb\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\x9a\xff\x99\xff\x98\xff\x96\xff\x97\xff\xb5\xff\x8b\xff\x8c\xff\xb4\xff\xb3\xff\xb2\xff\xfa\xff\x6f\xff\x61\xff\x63\xff\x6e\xff\x6d\xff\x6c\xff\x6b\xff\xad\xff\x69\xff\x92\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xfe\xb4\xfe\x00\x00\x90\xff\x9b\xff\x95\xff\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf6\xff\xf4\xff\xc0\xff\xbf\xff\xf5\xff\x70\xff\x73\xff\x71\xff\x74\xff\x75\xff\x77\xff\x00\x00\x84\xff\x86\xff\x85\xff\xc9\xfe\xd9\xfe\x9c\xff\xdb\xfe\x91\xff\x8e\xff\x00\x00\xb3\xfe\xb5\xfe\x93\xff\x53\xff\x00\x00\x00\x00\x00\x00\xc9\xfe\x00\x00\x7d\xff\x7c\xff\x7b\xff\x4e\xff\xb1\xff\xb0\xff\xae\xff\xaf\xff\x00\x00\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x66\xff\x64\xff\x67\xff\x00\x00\x00\x00\xbc\xff\xed\xff\xec\xff\xea\xff\xeb\xff\x00\x00\xd1\xff\xcd\xff\xcf\xff\xce\xff\xd8\xff\xc2\xff\xc5\xff\x00\x00\x0b\xff\x39\xff\x0c\xff\x0d\xff\xcc\xfe\x00\x00\xf4\xfe\xd6\xfe\x00\x00\xeb\xfe\xf6\xfe\x00\x00\xf0\xfe\xf1\xfe\xd7\xfe\xda\xfe\xf3\xff\xec\xfe\xee\xfe\x09\xff\x07\xff\x14\xff\x19\xff\x1e\xff\x21\xff\x24\xff\x27\xff\x37\xff\x3c\xff\x3f\xff\x47\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\xff\x33\xff\x34\xff\x32\xff\x31\xff\x30\xff\x00\x00\x2f\xff\x2e\xff\x2a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x1a\xff\x1b\xff\x00\x00\x16\xff\x15\xff\x00\x00\x11\xff\x10\xff\x0f\xff\x0e\xff\x05\xff\xc7\xfe\xe1\xfe\x00\x00\x00\x00\xf1\xff\xd5\xfe\xf7\xfe\xf5\xfe\xea\xfe\x00\x00\xf3\xfe\xd3\xfe\xdb\xfe\xce\xfe\x00\x00\xc3\xff\xc6\xff\xc4\xff\xc7\xff\x00\x00\x00\x00\xd0\xff\x00\x00\xba\xff\xbe\xff\x00\x00\x00\x00\xa9\xff\xaa\xff\xab\xff\x00\x00\x79\xff\x00\x00\x00\x00\xe8\xff\xe4\xff\x00\x00\xc7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\xff\x00\x00\x00\x00\x8f\xff\x00\x00\xdc\xfe\xda\xfe\x00\x00\x82\xff\x83\xff\x00\x00\x78\xff\x00\x00\x00\x00\x72\xff\x00\x00\x4e\xff\x8a\xff\x7f\xff\x87\xff\xdb\xfe\x00\x00\x89\xff\xf0\xff\xd8\xfe\x8d\xff\x49\xff\x00\x00\x4a\xff\x5d\xff\x61\xff\x58\xff\x57\xff\x00\x00\x50\xff\x00\x00\x52\xff\x00\x00\x65\xff\x00\x00\x61\xff\x01\xff\xbd\xfe\x00\x00\xc4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xd8\xff\xe1\xff\xe3\xff\xe2\xff\xda\xff\xd4\xff\x00\x00\x00\x00\x00\x00\x7a\xff\x4d\xff\xac\xff\x00\x00\x60\xff\x41\xff\xcc\xff\xcb\xff\xca\xff\xc8\xff\xd7\xff\xd0\xfe\xcd\xfe\xda\xfe\x00\x00\x08\xff\xe7\xfe\xe3\xfe\x00\x00\xdb\xfe\xe5\xfe\x00\x00\x00\x00\x12\xff\x17\xff\x1c\xff\x1f\xff\x22\xff\x25\xff\x2b\xff\x29\xff\x2d\xff\x35\xff\x3a\xff\x3d\xff\x00\x00\x44\xff\xe9\xfe\xe1\xfe\xe6\xfe\xda\xfe\xe8\xfe\x00\x00\xcb\xfe\xd4\xfe\xdb\xfe\xd2\xfe\x00\x00\x00\x00\xe7\xff\x00\x00\xd2\xff\xd3\xff\xd5\xff\xdb\xff\x00\x00\x00\x00\xe4\xff\xd6\xff\xe6\xff\xca\xfe\xc5\xfe\xc6\xfe\xc7\xfe\xc8\xfe\xbc\xfe\x00\x00\x5f\xff\x00\x00\x54\xff\x00\x00\x51\xff\x4e\xff\x00\x00\x56\xff\x5a\xff\x48\xff\x4b\xff\x00\x00\x80\xff\xda\xfe\x81\xff\x76\xff\x7e\xff\x88\xff\x5c\xff\x00\x00\x55\xff\x4f\xff\x5b\xff\x61\xff\xbe\xfe\xc3\xfe\x00\x00\xe0\xff\xdf\xff\xde\xff\xdc\xff\xd9\xff\xe9\xff\x62\xff\xc9\xff\xd1\xfe\xda\xfe\xb8\xfe\xe4\xfe\xe0\xfe\xdf\xfe\xe2\xfe\xde\xfe\xe1\xfe\xb7\xfe\xbb\xfe\xb9\xfe\xba\xfe\x00\x00\x00\x00\x00\x00\xc2\xfe\xc1\xfe\x00\x00\x5e\xff\x00\x00\x59\xff\xbf\xfe\x00\x00\xdd\xff\x00\x00\xb8\xfe\x42\xff\x43\xff\xd0\xff\xdd\xfe\x00\x00\xb6\xfe\xcf\xfe\xc0\xfe\x00\x00\x40\xff"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x00\x00\x12\x00\x0b\x00\x0c\x00\x02\x00\x50\x00\x21\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x55\x00\x0c\x00\x1b\x00\x1c\x00\x02\x00\x21\x00\x1f\x00\x20\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x09\x00\x09\x00\x0b\x00\x0b\x00\x21\x00\x0d\x00\x5d\x00\x3b\x00\x21\x00\x21\x00\x23\x00\x94\x00\x25\x00\x26\x00\x27\x00\x43\x00\x02\x00\x19\x00\x1a\x00\x1b\x00\x02\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x25\x00\x26\x00\x38\x00\x39\x00\x02\x00\x02\x00\x21\x00\x30\x00\x02\x00\x3f\x00\x21\x00\x09\x00\x46\x00\x47\x00\x43\x00\x45\x00\x44\x00\x45\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x27\x00\x94\x00\x3f\x00\x51\x00\x52\x00\x53\x00\x44\x00\x14\x00\x45\x00\x30\x00\x11\x00\x59\x00\x3b\x00\x30\x00\x15\x00\x13\x00\x21\x00\x27\x00\x27\x00\x61\x00\x43\x00\x27\x00\x64\x00\x21\x00\x66\x00\x21\x00\x68\x00\x30\x00\x6a\x00\x6b\x00\x30\x00\x12\x00\x9b\x00\x9c\x00\x70\x00\x71\x00\x17\x00\x73\x00\xa3\x00\x75\x00\xa3\x00\x77\x00\x21\x00\x3c\x00\x7a\x00\x94\x00\x21\x00\x7d\x00\x21\x00\x50\x00\x80\x00\x81\x00\x91\x00\x92\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\x04\x00\x46\x00\x47\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x77\x00\x0c\x00\x9d\x00\x7a\x00\x96\x00\x97\x00\x7d\x00\x42\x00\x43\x00\x80\x00\x81\x00\x9d\x00\x50\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xa6\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x21\x00\x25\x00\x26\x00\x27\x00\x1b\x00\x1c\x00\x4e\x00\x4f\x00\x1f\x00\x20\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x21\x00\x7a\x00\x38\x00\x39\x00\x7d\x00\x5d\x00\x21\x00\x80\x00\x81\x00\x3f\x00\x94\x00\x84\x00\x85\x00\x86\x00\x87\x00\x45\x00\x89\x00\x8a\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x6d\x00\x6e\x00\x3b\x00\x51\x00\x52\x00\x53\x00\x99\x00\x9a\x00\x80\x00\x81\x00\x43\x00\x59\x00\x84\x00\x85\x00\x86\x00\x87\x00\xa3\x00\x89\x00\x8a\x00\x61\x00\x58\x00\x21\x00\x64\x00\x5b\x00\x66\x00\x1e\x00\x68\x00\x20\x00\x6a\x00\x6b\x00\x27\x00\x28\x00\x82\x00\x83\x00\x70\x00\x71\x00\x79\x00\x73\x00\x6f\x00\x75\x00\x7c\x00\x77\x00\x21\x00\x1a\x00\x7a\x00\x1c\x00\x1d\x00\x7d\x00\x1f\x00\x20\x00\x80\x00\x81\x00\x3d\x00\x3e\x00\x84\x00\x85\x00\x86\x00\x87\x00\x7f\x00\x89\x00\x8a\x00\x15\x00\x16\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x21\x00\x0c\x00\x3c\x00\x3d\x00\x3e\x00\x96\x00\x97\x00\x7d\x00\x22\x00\x23\x00\x80\x00\x81\x00\x9d\x00\x8c\x00\x84\x00\x85\x00\x86\x00\x87\x00\x20\x00\x89\x00\x8a\x00\xa6\x00\x21\x00\x22\x00\x23\x00\xa3\x00\x25\x00\x26\x00\x27\x00\x3b\x00\x3c\x00\x40\x00\x41\x00\x42\x00\x43\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x25\x00\x26\x00\x38\x00\x39\x00\x14\x00\x21\x00\x5d\x00\x0f\x00\x10\x00\x3f\x00\x12\x00\x21\x00\x0e\x00\x15\x00\x16\x00\x45\x00\x18\x00\x9e\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x5a\x00\x21\x00\x37\x00\x51\x00\x52\x00\x53\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x94\x00\x59\x00\x3a\x00\x9e\x00\x3c\x00\x3d\x00\x3e\x00\x5f\x00\x60\x00\x61\x00\x12\x00\x13\x00\x64\x00\x44\x00\x66\x00\x10\x00\x68\x00\x12\x00\x6a\x00\x6b\x00\x15\x00\x16\x00\x21\x00\x18\x00\x70\x00\x71\x00\x21\x00\x73\x00\x50\x00\x75\x00\x24\x00\x77\x00\x21\x00\x07\x00\x7a\x00\x11\x00\x12\x00\x7d\x00\x06\x00\x15\x00\x80\x00\x81\x00\x18\x00\x94\x00\x84\x00\x85\x00\x86\x00\x87\x00\x7e\x00\x89\x00\x8a\x00\x21\x00\x78\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x54\x00\x0c\x00\x56\x00\x57\x00\x58\x00\x96\x00\x97\x00\x5b\x00\x7b\x00\x80\x00\x81\x00\x74\x00\x9d\x00\x84\x00\x85\x00\x86\x00\x87\x00\x76\x00\x89\x00\x8a\x00\x72\x00\xa6\x00\x21\x00\x22\x00\x23\x00\x6c\x00\x25\x00\x26\x00\x27\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\x21\x00\x69\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x11\x00\x12\x00\x38\x00\x39\x00\x15\x00\x67\x00\x62\x00\x18\x00\x11\x00\x3f\x00\x0f\x00\x11\x00\x05\x00\x11\x00\x0f\x00\x45\x00\x21\x00\x35\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x01\x00\x02\x00\x03\x00\x51\x00\x52\x00\x53\x00\x19\x00\x1a\x00\x11\x00\x1c\x00\x1d\x00\x59\x00\x1f\x00\x20\x00\x19\x00\x1a\x00\x21\x00\x1c\x00\x1d\x00\x61\x00\x1f\x00\x20\x00\x64\x00\x02\x00\x66\x00\x0a\x00\x68\x00\x23\x00\x6a\x00\x6b\x00\x18\x00\x0f\x00\x0f\x00\x0a\x00\x70\x00\x71\x00\x11\x00\x73\x00\x0c\x00\x75\x00\x02\x00\x77\x00\x0f\x00\x41\x00\x7a\x00\x11\x00\x11\x00\x7d\x00\x0f\x00\x11\x00\x80\x00\x81\x00\x15\x00\x11\x00\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\x80\x00\x81\x00\x0f\x00\x0f\x00\x84\x00\x85\x00\x86\x00\x87\x00\x08\x00\x89\x00\x8a\x00\x96\x00\x97\x00\x0a\x00\x0f\x00\x0a\x00\x15\x00\x08\x00\x9d\x00\x61\x00\x22\x00\x11\x00\x64\x00\x11\x00\x66\x00\x11\x00\x68\x00\xa6\x00\x6a\x00\x6b\x00\x02\x00\x35\x00\x35\x00\x1f\x00\x70\x00\x71\x00\x0f\x00\x73\x00\x18\x00\x75\x00\x02\x00\x77\x00\x44\x00\x20\x00\x7a\x00\x02\x00\x11\x00\x7d\x00\x11\x00\x0f\x00\x80\x00\x81\x00\x53\x00\x21\x00\x84\x00\x85\x00\x86\x00\x87\x00\x02\x00\x89\x00\x8a\x00\x61\x00\x37\x00\x41\x00\x64\x00\x35\x00\x66\x00\x39\x00\x68\x00\x2f\x00\x6a\x00\x6b\x00\x96\x00\x97\x00\x38\x00\x3a\x00\x70\x00\x71\x00\x2e\x00\x73\x00\x20\x00\x75\x00\x0a\x00\x77\x00\x30\x00\x0c\x00\x7a\x00\x15\x00\x0e\x00\x7d\x00\x02\x00\x08\x00\x80\x00\x81\x00\x0f\x00\x0f\x00\x84\x00\x85\x00\x86\x00\x87\x00\x20\x00\x89\x00\x8a\x00\x11\x00\x11\x00\x28\x00\x29\x00\x2a\x00\x21\x00\x2c\x00\x2d\x00\x36\x00\x08\x00\x18\x00\x96\x00\x97\x00\x0f\x00\x61\x00\x09\x00\x09\x00\x64\x00\x18\x00\x66\x00\x11\x00\x68\x00\x41\x00\x6a\x00\x6b\x00\x11\x00\x54\x00\x0f\x00\xa7\x00\x70\x00\x71\x00\x09\x00\x73\x00\x01\x00\x75\x00\x0f\x00\x77\x00\x59\x00\x02\x00\x7a\x00\x0f\x00\x11\x00\x7d\x00\x02\x00\x35\x00\x80\x00\x81\x00\x10\x00\x52\x00\x84\x00\x85\x00\x86\x00\x87\x00\x59\x00\x89\x00\x8a\x00\x21\x00\x0f\x00\x23\x00\x04\x00\x25\x00\x26\x00\x27\x00\x03\x00\x59\x00\x16\x00\x20\x00\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xa7\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\x93\x00\x61\x00\x95\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\x75\x00\xff\xff\x77\x00\x45\x00\xff\xff\x7a\x00\x48\x00\x49\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\x37\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x40\x00\x41\x00\x42\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\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\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\xff\xff\xff\xff\x38\x00\x39\x00\xff\xff\xff\xff\xa6\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x21\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\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\x2b\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xa6\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x96\x00\x97\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xa6\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xa6\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x96\x00\x97\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xa6\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xa0\x00\xa1\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x21\x00\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xa0\x00\xa1\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x9f\x00\x73\x00\xa1\x00\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\x9f\x00\x75\x00\xa1\x00\x77\x00\x21\x00\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x9f\x00\x73\x00\xa1\x00\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\x98\x00\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\x21\x00\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x96\x00\x97\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\x21\x00\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x96\x00\x97\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\x21\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x97\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\x21\x00\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x8d\x00\x8e\x00\x8f\x00\x90\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\x21\x00\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\xff\xff\x61\x00\x8f\x00\x90\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\x21\x00\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x61\x00\xff\xff\xff\xff\x64\x00\x90\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\x21\x00\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x5c\x00\x36\x00\xff\xff\xff\xff\x90\x00\x61\x00\xff\xff\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x21\x00\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x21\x00\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\x21\x00\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x61\x00\x89\x00\x8a\x00\x64\x00\xff\xff\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x21\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x66\x00\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\x21\x00\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\xff\xff\x66\x00\x21\x00\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\x21\x00\x89\x00\x8a\x00\xff\xff\xff\xff\x68\x00\xff\xff\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\xff\xff\x73\x00\xff\xff\x75\x00\xff\xff\x77\x00\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\xff\xff\xff\xff\x84\x00\x85\x00\x86\x00\x87\x00\xff\xff\x89\x00\x8a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x52\x00\x0d\x00\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\xff\xff\xff\xff\x37\x00\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x3f\x00\x09\x00\xff\xff\x0b\x00\x43\x00\x0d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x37\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x37\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x3f\x00\x11\x00\xff\xff\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\x1d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\x0e\x00\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\x1d\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\x00\xff\xff\xff\xff\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x09\x00\xff\xff\x0b\x00\xff\xff\x0d\x00\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x19\x00\x1a\x00\x1b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x26\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\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\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"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x30\x00\x87\x01\xa5\x00\xa6\x00\x1f\x00\xcd\x01\x74\x00\x31\x00\x32\x00\x33\x00\x34\x00\xa9\x01\x35\x00\xb9\x01\x5c\x01\x1f\x00\x4f\x01\x5d\x01\xad\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\xef\x00\x25\x00\xf0\x00\x26\x00\x70\x00\x27\x00\xac\x01\x21\x01\x06\x00\x74\x00\x36\x00\xba\x01\x37\x00\x38\x00\x39\x00\x76\x00\xaf\x00\x28\x00\x29\x00\x2a\x00\xaf\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x2b\x00\x2c\x00\x42\x00\x43\x00\x1f\x00\x1f\x00\x06\x00\x52\x01\xaf\x00\x44\x00\x74\x00\x2f\x01\x71\x00\x72\x00\x79\x00\x45\x00\x78\x00\x79\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\xb0\x00\x7b\x01\x2e\x00\x4c\x00\x4d\x00\x4e\x00\xf1\x00\x8e\x01\x30\x00\xb1\x00\xfd\x00\x4f\x00\x22\x01\xb1\x00\xf8\x00\x8a\x01\x29\x01\x30\x01\x51\x01\x07\x00\x76\x00\xb0\x00\x08\x00\x06\x00\x09\x00\x70\x00\x0a\x00\x52\x01\x0b\x00\x0c\x00\xb1\x00\x88\x01\xf9\x00\xfa\x00\x0d\x00\x0e\x00\x89\x01\x0f\x00\x95\x01\x10\x00\xfb\x00\x11\x00\x74\x00\xa7\x01\x12\x00\xa3\x01\x4f\x01\x13\x00\x06\x00\x97\x01\x14\x00\x15\x00\xc0\x01\xc1\x01\x16\x00\x17\x00\x18\x00\x19\x00\xa6\x01\x1a\x00\x1b\x00\x6a\x00\x73\x00\x72\x00\x31\x00\x32\x00\x33\x00\x34\x00\x6e\x01\x35\x00\xa7\x00\x12\x00\x50\x00\x1d\x00\x13\x00\x54\x01\x8c\x00\x14\x00\x15\x00\x51\x00\x9f\x01\x16\x00\x17\x00\x18\x00\x19\x00\x27\x01\x1a\x00\x1b\x00\x52\x00\x52\x01\x06\x00\x6b\x00\x6c\x00\x55\x01\x37\x00\x38\x00\x39\x00\x5b\x01\x5c\x01\x9e\x00\x9f\x00\x5d\x01\xad\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x74\x00\x6d\x01\x42\x00\x43\x00\x13\x00\xa5\x01\x06\x00\x14\x00\x15\x00\x44\x00\x60\x01\x16\x00\x17\x00\x18\x00\x19\x00\x45\x00\x1a\x00\x1b\x00\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\xd4\x00\xd5\x00\x75\x00\x4c\x00\x4d\x00\x4e\x00\x80\x01\x81\x01\x63\x01\x15\x00\x76\x00\x4f\x00\x16\x00\x17\x00\x18\x00\x19\x00\x82\x01\x1a\x00\x1b\x00\x07\x00\x9e\x01\x64\x01\x08\x00\x3a\x01\x09\x00\xfe\x00\x0a\x00\xff\x00\x0b\x00\x0c\x00\xea\x00\xeb\x00\xc4\x00\xc5\x00\x0d\x00\x0e\x00\xe2\x00\x0f\x00\x71\x01\x10\x00\xe5\x00\x11\x00\x29\x01\x5a\x01\x12\x00\xaa\x00\xab\x00\x13\x00\xac\x00\xad\x00\x14\x00\x15\x00\xec\x00\xed\x00\x16\x00\x17\x00\x18\x00\x19\x00\xe8\x00\x1a\x00\x1b\x00\xf8\x00\xc8\x01\x31\x00\x32\x00\x33\x00\x34\x00\x74\x00\x35\x00\x2b\x01\xa2\x01\x2d\x01\x50\x00\x1d\x00\x6c\x01\x3c\x01\x3d\x01\x14\x00\x15\x00\x51\x00\xed\x00\x16\x00\x17\x00\x18\x00\x19\x00\xfd\x00\x1a\x00\x1b\x00\x52\x00\x06\x00\x33\x01\x6c\x00\xf6\x00\x37\x00\x38\x00\x39\x00\xe4\x00\xe5\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xe7\x00\xe8\x00\x42\x00\x43\x00\x00\x01\x06\x00\x0d\x01\x49\x01\x4a\x01\x44\x00\x4b\x01\x29\x01\x10\x01\x4c\x01\x4d\x01\x45\x00\x4e\x01\x12\x01\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\x17\x01\x4f\x01\x1c\x01\x4c\x00\x4d\x00\x4e\x00\xc3\x01\xc4\x01\xda\x01\xc6\x01\x1e\x01\x4f\x00\x2a\x01\x20\x01\x2b\x01\x2c\x01\x2d\x01\x34\x01\x35\x01\x07\x00\x55\x00\x56\x00\x08\x00\x24\x01\x09\x00\xb2\x01\x0a\x00\x4b\x01\x0b\x00\x0c\x00\x4c\x01\x4d\x01\x87\x00\x4e\x01\x0d\x00\x0e\x00\x88\x00\x0f\x00\xa0\x00\x10\x00\xa2\x00\x11\x00\x4f\x01\xa4\x00\x12\x00\xd2\x01\x4b\x01\x13\x00\xc1\x00\xb4\x01\x14\x00\x15\x00\xb5\x01\xbf\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc6\x00\x1a\x00\x1b\x00\x4f\x01\xc8\x00\x31\x00\x32\x00\x33\x00\x34\x00\x36\x01\x35\x00\x37\x01\x38\x01\x39\x01\x50\x00\x1d\x00\x3a\x01\xc7\x00\x6b\x01\x15\x00\xca\x00\x51\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc9\x00\x1a\x00\x1b\x00\xcb\x00\x52\x00\x06\x00\xa0\x01\x6c\x00\xcc\x00\x37\x00\x38\x00\x39\x00\xc3\x01\xc4\x01\xc5\x01\xc6\x01\x06\x00\xcd\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\xb3\x01\x4b\x01\x42\x00\x43\x00\xb4\x01\xce\x00\xcf\x00\xb5\x01\xde\x01\x44\x00\xd2\x01\xd4\x01\x05\x00\xc3\x01\xca\x01\x45\x00\x4f\x01\xa2\x00\x46\x00\x47\x00\x6d\x00\x49\x00\x4a\x00\x4b\x00\x67\x00\x68\x00\x69\x00\x4c\x00\x4d\x00\x4e\x00\xd9\x01\xa9\x00\xcf\x01\xaa\x00\xab\x00\x4f\x00\xac\x00\xad\x00\xa8\x00\xa9\x00\x06\x00\xaa\x00\xab\x00\x07\x00\xac\x00\xad\x00\x08\x00\x1f\x00\x09\x00\xa9\x01\x0a\x00\xab\x01\x0b\x00\x0c\x00\x0f\x01\xb2\x01\xbc\x01\x7a\x01\x0d\x00\x0e\x00\x7b\x01\x0f\x00\x7e\x01\x10\x00\x1f\x00\x11\x00\x7d\x01\x7f\x01\x12\x00\xe0\xfe\x85\x01\x13\x00\x84\x01\x87\x01\x14\x00\x15\x00\xf8\x00\x8c\x01\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\xb1\x00\x15\x00\x8d\x01\x8e\x01\x16\x00\x17\x00\x18\x00\x19\x00\x02\x01\x1a\x00\x1b\x00\x50\x00\x1d\x00\x90\x01\x94\x01\x95\x01\xf8\x00\x97\x01\x51\x00\x07\x00\x3c\x01\x99\x01\x08\x00\x9b\x01\x09\x00\x9e\x01\x0a\x00\x52\x00\x0b\x00\x0c\x00\x1f\x00\xa2\x00\xa2\x00\xa2\x01\x0d\x00\x0e\x00\xa5\x01\x0f\x00\x0f\x01\x10\x00\x1f\x00\x11\x00\x29\x01\x31\x01\x12\x00\x1f\x00\x3f\x01\x13\x00\x49\x01\x62\x01\x14\x00\x15\x00\x54\x01\x06\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1f\x00\x1a\x00\x1b\x00\x07\x00\x73\x01\x74\x01\x08\x00\x78\x01\x09\x00\xe1\x00\x0a\x00\xd3\x00\x0b\x00\x0c\x00\x1c\x00\x1d\x00\xe0\x00\xe2\x00\x0d\x00\x0e\x00\xd4\x00\x0f\x00\xf3\x00\x10\x00\xf5\x00\x11\x00\xf2\x00\xf6\x00\x12\x00\xf8\x00\xf9\x00\x13\x00\xaf\x00\x02\x01\x14\x00\x15\x00\x03\x01\x04\x01\x16\x00\x17\x00\x18\x00\x19\x00\x07\x01\x1a\x00\x1b\x00\x05\x01\x08\x01\x8d\x00\x8e\x00\x8f\x00\x06\x00\x90\x00\x91\x00\x09\x01\x0d\x01\x0f\x01\x80\x00\x1d\x00\x10\x01\x07\x00\x12\x01\x14\x01\x08\x00\x19\x01\x09\x00\x15\x01\x0a\x00\x16\x01\x0b\x00\x0c\x00\x17\x01\x1e\x01\x20\x01\x81\x00\x0d\x00\x0e\x00\x14\x01\x0f\x00\x24\x01\x10\x00\x26\x01\x11\x00\xff\xff\x1f\x00\x12\x00\x27\x01\x80\x00\x13\x00\x1f\x00\xa2\x00\x14\x00\x15\x00\xa4\x00\x63\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\x1a\x00\x1b\x00\x06\x00\xc1\x00\x19\x01\xc3\x00\x37\x00\x38\x00\x39\x00\xc4\x00\xff\xff\xd1\x00\x05\x00\x80\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x00\x00\x82\x00\x3d\x01\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x62\x01\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\x00\x00\x7b\x00\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x7a\x00\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x00\x00\x85\x00\x07\x00\x7c\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x31\x01\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x74\x01\x0e\x00\x44\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x70\x01\x00\x00\x10\x00\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x6f\x01\x00\x00\x11\x00\x45\x00\x00\x00\x12\x00\x46\x00\x47\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\xb3\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\xb4\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x01\x00\x00\x00\x00\x07\x00\x00\x00\xdc\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x19\x01\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x1d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x47\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x06\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb8\x00\x56\x01\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x50\x00\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x52\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x06\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xbc\x00\x1a\x00\x1b\x00\xbd\x00\x09\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x1d\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x42\x01\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x0a\x01\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x0b\x01\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x42\x01\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x0a\x01\x1d\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x0b\x01\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x42\x01\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\xdc\x01\xcb\x01\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x42\x01\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\xca\x01\xcb\x01\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x42\x01\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\xb0\x01\x0f\x00\x45\x01\x10\x00\x00\x00\x11\x00\x00\x00\x06\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x43\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x44\x01\x10\x00\x45\x01\x11\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x6a\x01\x0f\x00\x45\x01\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x06\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb8\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x06\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\xba\x00\x1d\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x06\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x07\x00\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x40\x01\x1d\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x06\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x65\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x06\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x66\x01\x67\x01\x68\x01\x69\x01\x65\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x06\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\xbe\x01\xbd\x01\x69\x01\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x06\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\xbe\x01\x00\x00\x00\x00\x08\x00\xd8\x01\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x06\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x9b\x01\x7d\x00\x00\x00\x00\x00\xbf\x01\x9c\x01\x00\x00\x00\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x7e\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\xde\x01\x00\x00\xd5\x01\xd6\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xdb\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xd0\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x06\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\xd4\x01\x00\x00\xd5\x01\xd6\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xc8\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xaf\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xb6\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x78\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x7f\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x85\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x91\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x92\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xf3\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x32\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x57\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x59\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x5e\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x5f\x01\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\xf3\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x83\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x84\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x86\x00\x1a\x00\x1b\x00\x08\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xbc\x01\x00\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x00\x00\xd1\x00\x06\x00\x0a\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x06\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x76\x01\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x75\x01\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\xb2\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x14\x00\x15\x00\x00\x00\x00\x00\x16\x00\x17\x00\x18\x00\x19\x00\x00\x00\x1a\x00\x1b\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x6f\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x05\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x63\x00\x27\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x1c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x54\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2e\x00\x25\x00\x00\x00\x26\x00\x2f\x00\x27\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x47\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x01\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2e\x00\xe1\xfe\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x5c\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\xb8\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\xbc\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x5c\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\xd8\x01\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\xd8\x01\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x00\x00\x25\x00\x00\x00\x26\x00\x00\x00\x27\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x28\x00\x29\x00\x2a\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = array (3, 332) [
+	(3 , happyReduce_3),
+	(4 , happyReduce_4),
+	(5 , happyReduce_5),
+	(6 , happyReduce_6),
+	(7 , happyReduce_7),
+	(8 , happyReduce_8),
+	(9 , happyReduce_9),
+	(10 , happyReduce_10),
+	(11 , happyReduce_11),
+	(12 , happyReduce_12),
+	(13 , happyReduce_13),
+	(14 , happyReduce_14),
+	(15 , happyReduce_15),
+	(16 , happyReduce_16),
+	(17 , happyReduce_17),
+	(18 , happyReduce_18),
+	(19 , happyReduce_19),
+	(20 , happyReduce_20),
+	(21 , happyReduce_21),
+	(22 , happyReduce_22),
+	(23 , happyReduce_23),
+	(24 , happyReduce_24),
+	(25 , happyReduce_25),
+	(26 , happyReduce_26),
+	(27 , happyReduce_27),
+	(28 , happyReduce_28),
+	(29 , happyReduce_29),
+	(30 , happyReduce_30),
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111),
+	(112 , happyReduce_112),
+	(113 , happyReduce_113),
+	(114 , happyReduce_114),
+	(115 , happyReduce_115),
+	(116 , happyReduce_116),
+	(117 , happyReduce_117),
+	(118 , happyReduce_118),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123),
+	(124 , happyReduce_124),
+	(125 , happyReduce_125),
+	(126 , happyReduce_126),
+	(127 , happyReduce_127),
+	(128 , happyReduce_128),
+	(129 , happyReduce_129),
+	(130 , happyReduce_130),
+	(131 , happyReduce_131),
+	(132 , happyReduce_132),
+	(133 , happyReduce_133),
+	(134 , happyReduce_134),
+	(135 , happyReduce_135),
+	(136 , happyReduce_136),
+	(137 , happyReduce_137),
+	(138 , happyReduce_138),
+	(139 , happyReduce_139),
+	(140 , happyReduce_140),
+	(141 , happyReduce_141),
+	(142 , happyReduce_142),
+	(143 , happyReduce_143),
+	(144 , happyReduce_144),
+	(145 , happyReduce_145),
+	(146 , happyReduce_146),
+	(147 , happyReduce_147),
+	(148 , happyReduce_148),
+	(149 , happyReduce_149),
+	(150 , happyReduce_150),
+	(151 , happyReduce_151),
+	(152 , happyReduce_152),
+	(153 , happyReduce_153),
+	(154 , happyReduce_154),
+	(155 , happyReduce_155),
+	(156 , happyReduce_156),
+	(157 , happyReduce_157),
+	(158 , happyReduce_158),
+	(159 , happyReduce_159),
+	(160 , happyReduce_160),
+	(161 , happyReduce_161),
+	(162 , happyReduce_162),
+	(163 , happyReduce_163),
+	(164 , happyReduce_164),
+	(165 , happyReduce_165),
+	(166 , happyReduce_166),
+	(167 , happyReduce_167),
+	(168 , happyReduce_168),
+	(169 , happyReduce_169),
+	(170 , happyReduce_170),
+	(171 , happyReduce_171),
+	(172 , happyReduce_172),
+	(173 , happyReduce_173),
+	(174 , happyReduce_174),
+	(175 , happyReduce_175),
+	(176 , happyReduce_176),
+	(177 , happyReduce_177),
+	(178 , happyReduce_178),
+	(179 , happyReduce_179),
+	(180 , happyReduce_180),
+	(181 , happyReduce_181),
+	(182 , happyReduce_182),
+	(183 , happyReduce_183),
+	(184 , happyReduce_184),
+	(185 , happyReduce_185),
+	(186 , happyReduce_186),
+	(187 , happyReduce_187),
+	(188 , happyReduce_188),
+	(189 , happyReduce_189),
+	(190 , happyReduce_190),
+	(191 , happyReduce_191),
+	(192 , happyReduce_192),
+	(193 , happyReduce_193),
+	(194 , happyReduce_194),
+	(195 , happyReduce_195),
+	(196 , happyReduce_196),
+	(197 , happyReduce_197),
+	(198 , happyReduce_198),
+	(199 , happyReduce_199),
+	(200 , happyReduce_200),
+	(201 , happyReduce_201),
+	(202 , happyReduce_202),
+	(203 , happyReduce_203),
+	(204 , happyReduce_204),
+	(205 , happyReduce_205),
+	(206 , happyReduce_206),
+	(207 , happyReduce_207),
+	(208 , happyReduce_208),
+	(209 , happyReduce_209),
+	(210 , happyReduce_210),
+	(211 , happyReduce_211),
+	(212 , happyReduce_212),
+	(213 , happyReduce_213),
+	(214 , happyReduce_214),
+	(215 , happyReduce_215),
+	(216 , happyReduce_216),
+	(217 , happyReduce_217),
+	(218 , happyReduce_218),
+	(219 , happyReduce_219),
+	(220 , happyReduce_220),
+	(221 , happyReduce_221),
+	(222 , happyReduce_222),
+	(223 , happyReduce_223),
+	(224 , happyReduce_224),
+	(225 , happyReduce_225),
+	(226 , happyReduce_226),
+	(227 , happyReduce_227),
+	(228 , happyReduce_228),
+	(229 , happyReduce_229),
+	(230 , happyReduce_230),
+	(231 , happyReduce_231),
+	(232 , happyReduce_232),
+	(233 , happyReduce_233),
+	(234 , happyReduce_234),
+	(235 , happyReduce_235),
+	(236 , happyReduce_236),
+	(237 , happyReduce_237),
+	(238 , happyReduce_238),
+	(239 , happyReduce_239),
+	(240 , happyReduce_240),
+	(241 , happyReduce_241),
+	(242 , happyReduce_242),
+	(243 , happyReduce_243),
+	(244 , happyReduce_244),
+	(245 , happyReduce_245),
+	(246 , happyReduce_246),
+	(247 , happyReduce_247),
+	(248 , happyReduce_248),
+	(249 , happyReduce_249),
+	(250 , happyReduce_250),
+	(251 , happyReduce_251),
+	(252 , happyReduce_252),
+	(253 , happyReduce_253),
+	(254 , happyReduce_254),
+	(255 , happyReduce_255),
+	(256 , happyReduce_256),
+	(257 , happyReduce_257),
+	(258 , happyReduce_258),
+	(259 , happyReduce_259),
+	(260 , happyReduce_260),
+	(261 , happyReduce_261),
+	(262 , happyReduce_262),
+	(263 , happyReduce_263),
+	(264 , happyReduce_264),
+	(265 , happyReduce_265),
+	(266 , happyReduce_266),
+	(267 , happyReduce_267),
+	(268 , happyReduce_268),
+	(269 , happyReduce_269),
+	(270 , happyReduce_270),
+	(271 , happyReduce_271),
+	(272 , happyReduce_272),
+	(273 , happyReduce_273),
+	(274 , happyReduce_274),
+	(275 , happyReduce_275),
+	(276 , happyReduce_276),
+	(277 , happyReduce_277),
+	(278 , happyReduce_278),
+	(279 , happyReduce_279),
+	(280 , happyReduce_280),
+	(281 , happyReduce_281),
+	(282 , happyReduce_282),
+	(283 , happyReduce_283),
+	(284 , happyReduce_284),
+	(285 , happyReduce_285),
+	(286 , happyReduce_286),
+	(287 , happyReduce_287),
+	(288 , happyReduce_288),
+	(289 , happyReduce_289),
+	(290 , happyReduce_290),
+	(291 , happyReduce_291),
+	(292 , happyReduce_292),
+	(293 , happyReduce_293),
+	(294 , happyReduce_294),
+	(295 , happyReduce_295),
+	(296 , happyReduce_296),
+	(297 , happyReduce_297),
+	(298 , happyReduce_298),
+	(299 , happyReduce_299),
+	(300 , happyReduce_300),
+	(301 , happyReduce_301),
+	(302 , happyReduce_302),
+	(303 , happyReduce_303),
+	(304 , happyReduce_304),
+	(305 , happyReduce_305),
+	(306 , happyReduce_306),
+	(307 , happyReduce_307),
+	(308 , happyReduce_308),
+	(309 , happyReduce_309),
+	(310 , happyReduce_310),
+	(311 , happyReduce_311),
+	(312 , happyReduce_312),
+	(313 , happyReduce_313),
+	(314 , happyReduce_314),
+	(315 , happyReduce_315),
+	(316 , happyReduce_316),
+	(317 , happyReduce_317),
+	(318 , happyReduce_318),
+	(319 , happyReduce_319),
+	(320 , happyReduce_320),
+	(321 , happyReduce_321),
+	(322 , happyReduce_322),
+	(323 , happyReduce_323),
+	(324 , happyReduce_324),
+	(325 , happyReduce_325),
+	(326 , happyReduce_326),
+	(327 , happyReduce_327),
+	(328 , happyReduce_328),
+	(329 , happyReduce_329),
+	(330 , happyReduce_330),
+	(331 , happyReduce_331),
+	(332 , happyReduce_332)
+	]
+
+happy_n_terms = 90 :: Int
+happy_n_nonterms = 168 :: Int
+
+happyReduce_3 = happySpecReduce_1  0# happyReduction_3
+happyReduction_3 happy_x_1
+	 =  happyIn6
+		 ([]
+	)
+
+happyReduce_4 = happySpecReduce_1  0# happyReduction_4
+happyReduction_4 happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	happyIn6
+		 (happy_var_1
+	)}
+
+happyReduce_5 = happySpecReduce_1  0# happyReduction_5
+happyReduction_5 happy_x_1
+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> 
+	happyIn6
+		 ([happy_var_1]
+	)}
+
+happyReduce_6 = happySpecReduce_1  1# happyReduction_6
+happyReduction_6 happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	happyIn7
+		 (Module happy_var_1
+	)}
+
+happyReduce_7 = happySpecReduce_1  2# happyReduction_7
+happyReduction_7 happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	happyIn8
+		 (concat (reverse happy_var_1)
+	)}
+
+happyReduce_8 = happySpecReduce_0  3# happyReduction_8
+happyReduction_8  =  happyIn9
+		 ([]
+	)
+
+happyReduce_9 = happySpecReduce_2  3# happyReduction_9
+happyReduction_9 happy_x_2
+	happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn9
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_10 = happySpecReduce_1  4# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  happyIn10
+		 ([]
+	)
+
+happyReduce_11 = happySpecReduce_1  4# happyReduction_11
+happyReduction_11 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (happy_var_1
+	)}
+
+happyReduce_12 = happySpecReduce_2  5# happyReduction_12
+happyReduction_12 happy_x_2
+	happy_x_1
+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> 
+	happyIn11
+		 (happy_var_1
+	)}
+
+happyReduce_13 = happySpecReduce_0  6# happyReduction_13
+happyReduction_13  =  happyIn12
+		 (()
+	)
+
+happyReduce_14 = happySpecReduce_2  6# happyReduction_14
+happyReduction_14 happy_x_2
+	happy_x_1
+	 =  happyIn12
+		 (()
+	)
+
+happyReduce_15 = happyReduce 4# 7# happyReduction_15
+happyReduction_15 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut73 happy_x_2 of { happy_var_2 -> 
+	case happyOut164 happy_x_3 of { happy_var_3 -> 
+	happyIn13
+		 (Decorator { decorator_name = happy_var_2, decorator_args = happy_var_3 }
+	) `HappyStk` happyRest}}
+
+happyReduce_16 = happySpecReduce_1  8# happyReduction_16
+happyReduction_16 happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	happyIn14
+		 (reverse happy_var_1
+	)}
+
+happyReduce_17 = happySpecReduce_1  9# happyReduction_17
+happyReduction_17 happy_x_1
+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> 
+	happyIn15
+		 ([happy_var_1]
+	)}
+
+happyReduce_18 = happySpecReduce_2  9# happyReduction_18
+happyReduction_18 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
+	case happyOut13 happy_x_2 of { happy_var_2 -> 
+	happyIn15
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_19 = happySpecReduce_2  10# happyReduction_19
+happyReduction_19 happy_x_2
+	happy_x_1
+	 =  case happyOut14 happy_x_1 of { happy_var_1 -> 
+	case happyOut17 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (Decorated { decorated_decorators = happy_var_1, decorated_def = happy_var_2 }
+	)}}
+
+happyReduce_20 = happySpecReduce_1  11# happyReduction_20
+happyReduction_20 happy_x_1
+	 =  case happyOut163 happy_x_1 of { happy_var_1 -> 
+	happyIn17
+		 (happy_var_1
+	)}
+
+happyReduce_21 = happySpecReduce_1  11# happyReduction_21
+happyReduction_21 happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	happyIn17
+		 (happy_var_1
+	)}
+
+happyReduce_22 = happyReduce 6# 12# happyReduction_22
+happyReduction_22 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut39 happy_x_2 of { happy_var_2 -> 
+	case happyOut20 happy_x_3 of { happy_var_3 -> 
+	case happyOut19 happy_x_4 of { happy_var_4 -> 
+	case happyOut100 happy_x_6 of { happy_var_6 -> 
+	happyIn18
+		 (Fun { fun_name = happy_var_2 , fun_args = happy_var_3, fun_result_annotation = happy_var_4, fun_body = happy_var_6 }
+	) `HappyStk` happyRest}}}}
+
+happyReduce_23 = happySpecReduce_0  13# happyReduction_23
+happyReduction_23  =  happyIn19
+		 (Nothing
+	)
+
+happyReduce_24 = happySpecReduce_2  13# happyReduction_24
+happyReduction_24 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn19
+		 (Just happy_var_2
+	)}
+
+happyReduce_25 = happySpecReduce_3  14# happyReduction_25
+happyReduction_25 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut21 happy_x_2 of { happy_var_2 -> 
+	happyIn20
+		 (happy_var_2
+	)}
+
+happyReduce_26 = happySpecReduce_1  15# happyReduction_26
+happyReduction_26 happy_x_1
+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> 
+	happyIn21
+		 (happy_var_1
+	)}
+
+happyReduce_27 = happySpecReduce_0  16# happyReduction_27
+happyReduction_27  =  happyIn22
+		 ([]
+	)
+
+happyReduce_28 = happySpecReduce_1  16# happyReduction_28
+happyReduction_28 happy_x_1
+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
+	happyIn22
+		 ([happy_var_1]
+	)}
+
+happyReduce_29 = happySpecReduce_1  16# happyReduction_29
+happyReduction_29 happy_x_1
+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
+	happyIn22
+		 ([happy_var_1]
+	)}
+
+happyReduce_30 = happySpecReduce_1  16# happyReduction_30
+happyReduction_30 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn22
+		 ([happy_var_1]
+	)}
+
+happyReduce_31 = happySpecReduce_3  16# happyReduction_31
+happyReduction_31 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	case happyOut22 happy_x_3 of { happy_var_3 -> 
+	happyIn22
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_32 = happySpecReduce_3  16# happyReduction_32
+happyReduction_32 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> 
+	case happyOut23 happy_x_3 of { happy_var_3 -> 
+	happyIn22
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_33 = happySpecReduce_1  17# happyReduction_33
+happyReduction_33 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn23
+		 ([happy_var_1]
+	)}
+
+happyReduce_34 = happySpecReduce_3  17# happyReduction_34
+happyReduction_34 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	case happyOut23 happy_x_3 of { happy_var_3 -> 
+	happyIn23
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_35 = happySpecReduce_1  17# happyReduction_35
+happyReduction_35 happy_x_1
+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
+	happyIn23
+		 ([happy_var_1]
+	)}
+
+happyReduce_36 = happySpecReduce_2  18# happyReduction_36
+happyReduction_36 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut25 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 ((happy_var_1, happy_var_2)
+	)}}
+
+happyReduce_37 = happySpecReduce_0  19# happyReduction_37
+happyReduction_37  =  happyIn25
+		 (Nothing
+	)
+
+happyReduce_38 = happySpecReduce_2  19# happyReduction_38
+happyReduction_38 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn25
+		 (Just happy_var_2
+	)}
+
+happyReduce_39 = happySpecReduce_0  20# happyReduction_39
+happyReduction_39  =  happyIn26
+		 (Nothing
+	)
+
+happyReduce_40 = happySpecReduce_2  20# happyReduction_40
+happyReduction_40 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn26
+		 (Just happy_var_2
+	)}
+
+happyReduce_41 = happySpecReduce_2  21# happyReduction_41
+happyReduction_41 happy_x_2
+	happy_x_1
+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn27
+		 (makeParam happy_var_1 happy_var_2
+	)}}
+
+happyReduce_42 = happySpecReduce_2  22# happyReduction_42
+happyReduction_42 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn28
+		 (makeStarParam happy_var_2
+	)}
+
+happyReduce_43 = happySpecReduce_0  23# happyReduction_43
+happyReduction_43  =  happyIn29
+		 (Nothing
+	)
+
+happyReduce_44 = happySpecReduce_1  23# happyReduction_44
+happyReduction_44 happy_x_1
+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> 
+	happyIn29
+		 (Just happy_var_1
+	)}
+
+happyReduce_45 = happySpecReduce_2  24# happyReduction_45
+happyReduction_45 happy_x_2
+	happy_x_1
+	 =  case happyOut24 happy_x_2 of { happy_var_2 -> 
+	happyIn30
+		 (makeStarStarParam happy_var_2
+	)}
+
+happyReduce_46 = happySpecReduce_1  25# happyReduction_46
+happyReduction_46 happy_x_1
+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> 
+	happyIn31
+		 (happy_var_1
+	)}
+
+happyReduce_47 = happySpecReduce_0  26# happyReduction_47
+happyReduction_47  =  happyIn32
+		 ([]
+	)
+
+happyReduce_48 = happySpecReduce_1  26# happyReduction_48
+happyReduction_48 happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 ([happy_var_1]
+	)}
+
+happyReduce_49 = happySpecReduce_1  26# happyReduction_49
+happyReduction_49 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 ([happy_var_1]
+	)}
+
+happyReduce_50 = happySpecReduce_1  26# happyReduction_50
+happyReduction_50 happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 ([happy_var_1]
+	)}
+
+happyReduce_51 = happySpecReduce_3  26# happyReduction_51
+happyReduction_51 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	case happyOut32 happy_x_3 of { happy_var_3 -> 
+	happyIn32
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_52 = happySpecReduce_3  26# happyReduction_52
+happyReduction_52 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> 
+	case happyOut33 happy_x_3 of { happy_var_3 -> 
+	happyIn32
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_53 = happySpecReduce_1  27# happyReduction_53
+happyReduction_53 happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 ([happy_var_1]
+	)}
+
+happyReduce_54 = happySpecReduce_3  27# happyReduction_54
+happyReduction_54 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> 
+	case happyOut33 happy_x_3 of { happy_var_3 -> 
+	happyIn33
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_55 = happySpecReduce_1  27# happyReduction_55
+happyReduction_55 happy_x_1
+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 ([happy_var_1]
+	)}
+
+happyReduce_56 = happySpecReduce_2  28# happyReduction_56
+happyReduction_56 happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn34
+		 (makeParam (happy_var_1, Nothing) happy_var_2
+	)}}
+
+happyReduce_57 = happySpecReduce_2  29# happyReduction_57
+happyReduction_57 happy_x_2
+	happy_x_1
+	 =  case happyOut36 happy_x_2 of { happy_var_2 -> 
+	happyIn35
+		 (makeStarParam happy_var_2
+	)}
+
+happyReduce_58 = happySpecReduce_0  30# happyReduction_58
+happyReduction_58  =  happyIn36
+		 (Nothing
+	)
+
+happyReduce_59 = happySpecReduce_1  30# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> 
+	happyIn36
+		 (Just (happy_var_1, Nothing)
+	)}
+
+happyReduce_60 = happySpecReduce_2  31# happyReduction_60
+happyReduction_60 happy_x_2
+	happy_x_1
+	 =  case happyOut38 happy_x_2 of { happy_var_2 -> 
+	happyIn37
+		 (makeStarStarParam (happy_var_2, Nothing)
+	)}
+
+happyReduce_61 = happySpecReduce_1  32# happyReduction_61
+happyReduction_61 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.Identifier _ happy_var_1) -> 
+	happyIn38
+		 (Ident happy_var_1
+	)}
+
+happyReduce_62 = happySpecReduce_1  33# happyReduction_62
+happyReduction_62 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.Identifier _ happy_var_1) -> 
+	happyIn39
+		 (Ident happy_var_1
+	)}
+
+happyReduce_63 = happySpecReduce_1  34# happyReduction_63
+happyReduction_63 happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	happyIn40
+		 (happy_var_1
+	)}
+
+happyReduce_64 = happySpecReduce_1  34# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> 
+	happyIn40
+		 ([happy_var_1]
+	)}
+
+happyReduce_65 = happySpecReduce_3  35# happyReduction_65
+happyReduction_65 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
+	happyIn41
+		 (reverse happy_var_1
+	)}
+
+happyReduce_66 = happySpecReduce_0  36# happyReduction_66
+happyReduction_66  =  happyIn42
+		 (()
+	)
+
+happyReduce_67 = happySpecReduce_1  36# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  happyIn42
+		 (()
+	)
+
+happyReduce_68 = happySpecReduce_1  37# happyReduction_68
+happyReduction_68 happy_x_1
+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
+	happyIn43
+		 ([happy_var_1]
+	)}
+
+happyReduce_69 = happySpecReduce_3  37# happyReduction_69
+happyReduction_69 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
+	case happyOut44 happy_x_3 of { happy_var_3 -> 
+	happyIn43
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_70 = happySpecReduce_1  38# happyReduction_70
+happyReduction_70 happy_x_1
+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_71 = happySpecReduce_1  38# happyReduction_71
+happyReduction_71 happy_x_1
+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_72 = happySpecReduce_1  38# happyReduction_72
+happyReduction_72 happy_x_1
+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_73 = happySpecReduce_1  38# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_74 = happySpecReduce_1  38# happyReduction_74
+happyReduction_74 happy_x_1
+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_75 = happySpecReduce_1  38# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_76 = happySpecReduce_1  38# happyReduction_76
+happyReduction_76 happy_x_1
+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_77 = happySpecReduce_1  38# happyReduction_77
+happyReduction_77 happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+happyReduce_78 = happySpecReduce_2  39# happyReduction_78
+happyReduction_78 happy_x_2
+	happy_x_1
+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> 
+	case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn45
+		 (makeAssignmentOrExpr happy_var_1 happy_var_2
+	)}}
+
+happyReduce_79 = happySpecReduce_1  40# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	happyIn46
+		 (Left happy_var_1
+	)}
+
+happyReduce_80 = happySpecReduce_1  40# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> 
+	happyIn46
+		 (Right happy_var_1
+	)}
+
+happyReduce_81 = happySpecReduce_1  41# happyReduction_81
+happyReduction_81 happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	happyIn47
+		 (reverse happy_var_1
+	)}
+
+happyReduce_82 = happySpecReduce_0  42# happyReduction_82
+happyReduction_82  =  happyIn48
+		 ([]
+	)
+
+happyReduce_83 = happySpecReduce_3  42# happyReduction_83
+happyReduction_83 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_3 of { happy_var_3 -> 
+	happyIn48
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_84 = happySpecReduce_1  43# happyReduction_84
+happyReduction_84 happy_x_1
+	 =  case happyOut172 happy_x_1 of { happy_var_1 -> 
+	happyIn49
+		 (happy_var_1
+	)}
+
+happyReduce_85 = happySpecReduce_1  43# happyReduction_85
+happyReduction_85 happy_x_1
+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> 
+	happyIn49
+		 (happy_var_1
+	)}
+
+happyReduce_86 = happySpecReduce_2  44# happyReduction_86
+happyReduction_86 happy_x_2
+	happy_x_1
+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> 
+	case happyOut49 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 ((happy_var_1, happy_var_2)
+	)}}
+
+happyReduce_87 = happySpecReduce_1  45# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  happyIn51
+		 (AST.PlusAssign
+	)
+
+happyReduce_88 = happySpecReduce_1  45# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  happyIn51
+		 (AST.MinusAssign
+	)
+
+happyReduce_89 = happySpecReduce_1  45# happyReduction_89
+happyReduction_89 happy_x_1
+	 =  happyIn51
+		 (AST.MultAssign
+	)
+
+happyReduce_90 = happySpecReduce_1  45# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  happyIn51
+		 (AST.DivAssign
+	)
+
+happyReduce_91 = happySpecReduce_1  45# happyReduction_91
+happyReduction_91 happy_x_1
+	 =  happyIn51
+		 (AST.ModAssign
+	)
+
+happyReduce_92 = happySpecReduce_1  45# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  happyIn51
+		 (AST.PowAssign
+	)
+
+happyReduce_93 = happySpecReduce_1  45# happyReduction_93
+happyReduction_93 happy_x_1
+	 =  happyIn51
+		 (AST.BinAndAssign
+	)
+
+happyReduce_94 = happySpecReduce_1  45# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  happyIn51
+		 (AST.BinOrAssign
+	)
+
+happyReduce_95 = happySpecReduce_1  45# happyReduction_95
+happyReduction_95 happy_x_1
+	 =  happyIn51
+		 (AST.BinXorAssign
+	)
+
+happyReduce_96 = happySpecReduce_1  45# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  happyIn51
+		 (AST.LeftShiftAssign
+	)
+
+happyReduce_97 = happySpecReduce_1  45# happyReduction_97
+happyReduction_97 happy_x_1
+	 =  happyIn51
+		 (AST.RightShiftAssign
+	)
+
+happyReduce_98 = happySpecReduce_1  45# happyReduction_98
+happyReduction_98 happy_x_1
+	 =  happyIn51
+		 (AST.FloorDivAssign
+	)
+
+happyReduce_99 = happySpecReduce_2  46# happyReduction_99
+happyReduction_99 happy_x_2
+	happy_x_1
+	 =  case happyOut153 happy_x_2 of { happy_var_2 -> 
+	happyIn52
+		 (AST.Delete { del_exprs = happy_var_2 }
+	)}
+
+happyReduce_100 = happySpecReduce_1  47# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  happyIn53
+		 (AST.Pass
+	)
+
+happyReduce_101 = happySpecReduce_1  48# happyReduction_101
+happyReduction_101 happy_x_1
+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (happy_var_1
+	)}
+
+happyReduce_102 = happySpecReduce_1  48# happyReduction_102
+happyReduction_102 happy_x_1
+	 =  case happyOut56 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (happy_var_1
+	)}
+
+happyReduce_103 = happySpecReduce_1  48# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (happy_var_1
+	)}
+
+happyReduce_104 = happySpecReduce_1  48# happyReduction_104
+happyReduction_104 happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (happy_var_1
+	)}
+
+happyReduce_105 = happySpecReduce_1  48# happyReduction_105
+happyReduction_105 happy_x_1
+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> 
+	happyIn54
+		 (happy_var_1
+	)}
+
+happyReduce_106 = happySpecReduce_1  49# happyReduction_106
+happyReduction_106 happy_x_1
+	 =  happyIn55
+		 (AST.Break
+	)
+
+happyReduce_107 = happySpecReduce_1  50# happyReduction_107
+happyReduction_107 happy_x_1
+	 =  happyIn56
+		 (AST.Continue
+	)
+
+happyReduce_108 = happySpecReduce_2  51# happyReduction_108
+happyReduction_108 happy_x_2
+	happy_x_1
+	 =  case happyOut173 happy_x_2 of { happy_var_2 -> 
+	happyIn57
+		 (AST.Return { return_expr = happy_var_2 }
+	)}
+
+happyReduce_109 = happySpecReduce_1  52# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  case happyOut172 happy_x_1 of { happy_var_1 -> 
+	happyIn58
+		 (StmtExpr { stmt_expr = happy_var_1 }
+	)}
+
+happyReduce_110 = happySpecReduce_2  53# happyReduction_110
+happyReduction_110 happy_x_2
+	happy_x_1
+	 =  case happyOut60 happy_x_2 of { happy_var_2 -> 
+	happyIn59
+		 (AST.Raise { raise_expr = happy_var_2 }
+	)}
+
+happyReduce_111 = happySpecReduce_0  54# happyReduction_111
+happyReduction_111  =  happyIn60
+		 (Nothing
+	)
+
+happyReduce_112 = happySpecReduce_2  54# happyReduction_112
+happyReduction_112 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	case happyOut61 happy_x_2 of { happy_var_2 -> 
+	happyIn60
+		 (Just (happy_var_1, happy_var_2)
+	)}}
+
+happyReduce_113 = happySpecReduce_0  55# happyReduction_113
+happyReduction_113  =  happyIn61
+		 (Nothing
+	)
+
+happyReduce_114 = happySpecReduce_2  55# happyReduction_114
+happyReduction_114 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn61
+		 (Just happy_var_2
+	)}
+
+happyReduce_115 = happySpecReduce_1  56# happyReduction_115
+happyReduction_115 happy_x_1
+	 =  case happyOut69 happy_x_1 of { happy_var_1 -> 
+	happyIn62
+		 (happy_var_1
+	)}
+
+happyReduce_116 = happySpecReduce_1  56# happyReduction_116
+happyReduction_116 happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	happyIn62
+		 (happy_var_1
+	)}
+
+happyReduce_117 = happyReduce 4# 57# happyReduction_117
+happyReduction_117 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut65 happy_x_2 of { happy_var_2 -> 
+	case happyOut64 happy_x_4 of { happy_var_4 -> 
+	happyIn63
+		 (FromImport { from_module = happy_var_2, from_items = happy_var_4 }
+	) `HappyStk` happyRest}}
+
+happyReduce_118 = happySpecReduce_1  58# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  happyIn64
+		 (ImportEverything
+	)
+
+happyReduce_119 = happySpecReduce_3  58# happyReduction_119
+happyReduction_119 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut67 happy_x_2 of { happy_var_2 -> 
+	happyIn64
+		 (happy_var_2
+	)}
+
+happyReduce_120 = happySpecReduce_1  58# happyReduction_120
+happyReduction_120 happy_x_1
+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
+	happyIn64
+		 (happy_var_1
+	)}
+
+happyReduce_121 = happySpecReduce_1  59# happyReduction_121
+happyReduction_121 happy_x_1
+	 =  happyIn65
+		 (ImportDot
+	)
+
+happyReduce_122 = happySpecReduce_1  59# happyReduction_122
+happyReduction_122 happy_x_1
+	 =  happyIn65
+		 (ImportRelative (ImportRelative ImportDot)
+	)
+
+happyReduce_123 = happySpecReduce_1  59# happyReduction_123
+happyReduction_123 happy_x_1
+	 =  case happyOut73 happy_x_1 of { happy_var_1 -> 
+	happyIn65
+		 (ImportName happy_var_1
+	)}
+
+happyReduce_124 = happySpecReduce_2  59# happyReduction_124
+happyReduction_124 happy_x_2
+	happy_x_1
+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> 
+	happyIn65
+		 (ImportRelative happy_var_2
+	)}
+
+happyReduce_125 = happySpecReduce_2  59# happyReduction_125
+happyReduction_125 happy_x_2
+	happy_x_1
+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> 
+	happyIn65
+		 (ImportRelative (ImportRelative (ImportRelative happy_var_2))
+	)}
+
+happyReduce_126 = happySpecReduce_2  60# happyReduction_126
+happyReduction_126 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut99 happy_x_2 of { happy_var_2 -> 
+	happyIn66
+		 (FromItem { from_item_name = happy_var_1, from_as_name = happy_var_2 }
+	)}}
+
+happyReduce_127 = happySpecReduce_2  61# happyReduction_127
+happyReduction_127 happy_x_2
+	happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	happyIn67
+		 (FromItems (reverse happy_var_1)
+	)}
+
+happyReduce_128 = happySpecReduce_1  62# happyReduction_128
+happyReduction_128 happy_x_1
+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> 
+	happyIn68
+		 ([happy_var_1]
+	)}
+
+happyReduce_129 = happySpecReduce_3  62# happyReduction_129
+happyReduction_129 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	case happyOut66 happy_x_3 of { happy_var_3 -> 
+	happyIn68
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_130 = happySpecReduce_2  63# happyReduction_130
+happyReduction_130 happy_x_2
+	happy_x_1
+	 =  case happyOut70 happy_x_2 of { happy_var_2 -> 
+	happyIn69
+		 (AST.Import { import_items = happy_var_2 }
+	)}
+
+happyReduce_131 = happySpecReduce_1  64# happyReduction_131
+happyReduction_131 happy_x_1
+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
+	happyIn70
+		 (reverse happy_var_1
+	)}
+
+happyReduce_132 = happySpecReduce_1  65# happyReduction_132
+happyReduction_132 happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn71
+		 ([happy_var_1]
+	)}
+
+happyReduce_133 = happySpecReduce_3  65# happyReduction_133
+happyReduction_133 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> 
+	case happyOut72 happy_x_3 of { happy_var_3 -> 
+	happyIn71
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_134 = happySpecReduce_2  66# happyReduction_134
+happyReduction_134 happy_x_2
+	happy_x_1
+	 =  case happyOut73 happy_x_1 of { happy_var_1 -> 
+	case happyOut99 happy_x_2 of { happy_var_2 -> 
+	happyIn72
+		 (ImportItem { import_item_name = happy_var_1, import_as_name = happy_var_2 }
+	)}}
+
+happyReduce_135 = happySpecReduce_2  67# happyReduction_135
+happyReduction_135 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut74 happy_x_2 of { happy_var_2 -> 
+	happyIn73
+		 (happy_var_1 : reverse happy_var_2
+	)}}
+
+happyReduce_136 = happySpecReduce_0  68# happyReduction_136
+happyReduction_136  =  happyIn74
+		 ([]
+	)
+
+happyReduce_137 = happySpecReduce_3  68# happyReduction_137
+happyReduction_137 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn74
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_138 = happySpecReduce_2  69# happyReduction_138
+happyReduction_138 happy_x_2
+	happy_x_1
+	 =  case happyOut76 happy_x_2 of { happy_var_2 -> 
+	happyIn75
+		 (AST.Global { global_vars = happy_var_2 }
+	)}
+
+happyReduce_139 = happySpecReduce_1  70# happyReduction_139
+happyReduction_139 happy_x_1
+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 (reverse happy_var_1
+	)}
+
+happyReduce_140 = happySpecReduce_1  71# happyReduction_140
+happyReduction_140 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn77
+		 ([happy_var_1]
+	)}
+
+happyReduce_141 = happySpecReduce_3  71# happyReduction_141
+happyReduction_141 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> 
+	case happyOut39 happy_x_3 of { happy_var_3 -> 
+	happyIn77
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_142 = happySpecReduce_2  72# happyReduction_142
+happyReduction_142 happy_x_2
+	happy_x_1
+	 =  case happyOut76 happy_x_2 of { happy_var_2 -> 
+	happyIn78
+		 (AST.NonLocal { nonLocal_vars = happy_var_2 }
+	)}
+
+happyReduce_143 = happySpecReduce_2  73# happyReduction_143
+happyReduction_143 happy_x_2
+	happy_x_1
+	 =  case happyOut157 happy_x_2 of { happy_var_2 -> 
+	happyIn79
+		 (AST.Assert { assert_exprs = reverse happy_var_2 }
+	)}
+
+happyReduce_144 = happySpecReduce_1  74# happyReduction_144
+happyReduction_144 happy_x_1
+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_145 = happySpecReduce_1  74# happyReduction_145
+happyReduction_145 happy_x_1
+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_146 = happySpecReduce_1  74# happyReduction_146
+happyReduction_146 happy_x_1
+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_147 = happySpecReduce_1  74# happyReduction_147
+happyReduction_147 happy_x_1
+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_148 = happySpecReduce_1  74# happyReduction_148
+happyReduction_148 happy_x_1
+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_149 = happySpecReduce_1  74# happyReduction_149
+happyReduction_149 happy_x_1
+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_150 = happySpecReduce_1  74# happyReduction_150
+happyReduction_150 happy_x_1
+	 =  case happyOut163 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_151 = happySpecReduce_1  74# happyReduction_151
+happyReduction_151 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+happyReduce_152 = happySpecReduce_2  75# happyReduction_152
+happyReduction_152 happy_x_2
+	happy_x_1
+	 =  case happyOut82 happy_x_1 of { happy_var_1 -> 
+	case happyOut86 happy_x_2 of { happy_var_2 -> 
+	happyIn81
+		 (Conditional { cond_guards = happy_var_1, cond_else = happy_var_2 }
+	)}}
+
+happyReduce_153 = happySpecReduce_2  76# happyReduction_153
+happyReduction_153 happy_x_2
+	happy_x_1
+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> 
+	case happyOut84 happy_x_2 of { happy_var_2 -> 
+	happyIn82
+		 (happy_var_1 : happy_var_2
+	)}}
+
+happyReduce_154 = happyReduce 4# 77# happyReduction_154
+happyReduction_154 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut103 happy_x_2 of { happy_var_2 -> 
+	case happyOut100 happy_x_4 of { happy_var_4 -> 
+	happyIn83
+		 ((happy_var_2, happy_var_4)
+	) `HappyStk` happyRest}}
+
+happyReduce_155 = happySpecReduce_1  78# happyReduction_155
+happyReduction_155 happy_x_1
+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> 
+	happyIn84
+		 (reverse happy_var_1
+	)}
+
+happyReduce_156 = happySpecReduce_0  79# happyReduction_156
+happyReduction_156  =  happyIn85
+		 ([]
+	)
+
+happyReduce_157 = happyReduce 5# 79# happyReduction_157
+happyReduction_157 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut85 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_3 of { happy_var_3 -> 
+	case happyOut100 happy_x_5 of { happy_var_5 -> 
+	happyIn85
+		 ((happy_var_3, happy_var_5) : happy_var_1
+	) `HappyStk` happyRest}}}
+
+happyReduce_158 = happySpecReduce_0  80# happyReduction_158
+happyReduction_158  =  happyIn86
+		 ([]
+	)
+
+happyReduce_159 = happySpecReduce_3  80# happyReduction_159
+happyReduction_159 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut100 happy_x_3 of { happy_var_3 -> 
+	happyIn86
+		 (happy_var_3
+	)}
+
+happyReduce_160 = happyReduce 5# 81# happyReduction_160
+happyReduction_160 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut103 happy_x_2 of { happy_var_2 -> 
+	case happyOut100 happy_x_4 of { happy_var_4 -> 
+	case happyOut86 happy_x_5 of { happy_var_5 -> 
+	happyIn87
+		 (AST.While { while_cond = happy_var_2 , while_body = happy_var_4, while_else = happy_var_5 }
+	) `HappyStk` happyRest}}}
+
+happyReduce_161 = happyReduce 7# 82# happyReduction_161
+happyReduction_161 (happy_x_7 `HappyStk`
+	happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut153 happy_x_2 of { happy_var_2 -> 
+	case happyOut156 happy_x_4 of { happy_var_4 -> 
+	case happyOut100 happy_x_6 of { happy_var_6 -> 
+	case happyOut86 happy_x_7 of { happy_var_7 -> 
+	happyIn88
+		 (AST.For { for_targets = happy_var_2, for_generator = happy_var_4, for_body = happy_var_6, for_else = happy_var_7 }
+	) `HappyStk` happyRest}}}}
+
+happyReduce_162 = happyReduce 4# 83# happyReduction_162
+happyReduction_162 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut100 happy_x_3 of { happy_var_3 -> 
+	case happyOut90 happy_x_4 of { happy_var_4 -> 
+	happyIn89
+		 (makeTry happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_163 = happySpecReduce_3  84# happyReduction_163
+happyReduction_163 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
+	case happyOut86 happy_x_2 of { happy_var_2 -> 
+	case happyOut91 happy_x_3 of { happy_var_3 -> 
+	happyIn90
+		 ((happy_var_1, happy_var_2, happy_var_3)
+	)}}}
+
+happyReduce_164 = happySpecReduce_3  84# happyReduction_164
+happyReduction_164 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut100 happy_x_3 of { happy_var_3 -> 
+	happyIn90
+		 (([], [], happy_var_3)
+	)}
+
+happyReduce_165 = happySpecReduce_0  85# happyReduction_165
+happyReduction_165  =  happyIn91
+		 ([]
+	)
+
+happyReduce_166 = happySpecReduce_3  85# happyReduction_166
+happyReduction_166 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut100 happy_x_3 of { happy_var_3 -> 
+	happyIn91
+		 (happy_var_3
+	)}
+
+happyReduce_167 = happySpecReduce_1  86# happyReduction_167
+happyReduction_167 happy_x_1
+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> 
+	happyIn92
+		 (reverse happy_var_1
+	)}
+
+happyReduce_168 = happySpecReduce_1  87# happyReduction_168
+happyReduction_168 happy_x_1
+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> 
+	happyIn93
+		 ([happy_var_1]
+	)}
+
+happyReduce_169 = happySpecReduce_2  87# happyReduction_169
+happyReduction_169 happy_x_2
+	happy_x_1
+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> 
+	case happyOut94 happy_x_2 of { happy_var_2 -> 
+	happyIn93
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_170 = happySpecReduce_3  88# happyReduction_170
+happyReduction_170 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> 
+	case happyOut100 happy_x_3 of { happy_var_3 -> 
+	happyIn94
+		 ((happy_var_1, happy_var_3)
+	)}}
+
+happyReduce_171 = happyReduce 5# 89# happyReduction_171
+happyReduction_171 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut103 happy_x_2 of { happy_var_2 -> 
+	case happyOut96 happy_x_3 of { happy_var_3 -> 
+	case happyOut100 happy_x_5 of { happy_var_5 -> 
+	happyIn95
+		 (AST.With { with_context = happy_var_2, with_as = happy_var_3, with_body = happy_var_5 }
+	) `HappyStk` happyRest}}}
+
+happyReduce_172 = happySpecReduce_0  90# happyReduction_172
+happyReduction_172  =  happyIn96
+		 (Nothing
+	)
+
+happyReduce_173 = happySpecReduce_2  90# happyReduction_173
+happyReduction_173 happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	happyIn96
+		 (Just happy_var_2
+	)}
+
+happyReduce_174 = happySpecReduce_2  91# happyReduction_174
+happyReduction_174 happy_x_2
+	happy_x_1
+	 =  case happyOut98 happy_x_2 of { happy_var_2 -> 
+	happyIn97
+		 (happy_var_2
+	)}
+
+happyReduce_175 = happySpecReduce_0  92# happyReduction_175
+happyReduction_175  =  happyIn98
+		 (Nothing
+	)
+
+happyReduce_176 = happySpecReduce_2  92# happyReduction_176
+happyReduction_176 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	case happyOut99 happy_x_2 of { happy_var_2 -> 
+	happyIn98
+		 (Just (happy_var_1, happy_var_2)
+	)}}
+
+happyReduce_177 = happySpecReduce_0  93# happyReduction_177
+happyReduction_177  =  happyIn99
+		 (Nothing
+	)
+
+happyReduce_178 = happySpecReduce_2  93# happyReduction_178
+happyReduction_178 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn99
+		 (Just happy_var_2
+	)}
+
+happyReduce_179 = happySpecReduce_1  94# happyReduction_179
+happyReduction_179 happy_x_1
+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> 
+	happyIn100
+		 (happy_var_1
+	)}
+
+happyReduce_180 = happySpecReduce_3  94# happyReduction_180
+happyReduction_180 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut101 happy_x_2 of { happy_var_2 -> 
+	happyIn100
+		 (happy_var_2
+	)}
+
+happyReduce_181 = happySpecReduce_1  95# happyReduction_181
+happyReduction_181 happy_x_1
+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> 
+	happyIn101
+		 (reverse (concat happy_var_1)
+	)}
+
+happyReduce_182 = happySpecReduce_1  96# happyReduction_182
+happyReduction_182 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn102
+		 ([happy_var_1]
+	)}
+
+happyReduce_183 = happySpecReduce_2  96# happyReduction_183
+happyReduction_183 happy_x_2
+	happy_x_1
+	 =  case happyOut102 happy_x_1 of { happy_var_1 -> 
+	case happyOut40 happy_x_2 of { happy_var_2 -> 
+	happyIn102
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_184 = happySpecReduce_2  97# happyReduction_184
+happyReduction_184 happy_x_2
+	happy_x_1
+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> 
+	case happyOut104 happy_x_2 of { happy_var_2 -> 
+	happyIn103
+		 (makeConditionalExpr happy_var_1 happy_var_2
+	)}}
+
+happyReduce_185 = happySpecReduce_1  97# happyReduction_185
+happyReduction_185 happy_x_1
+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> 
+	happyIn103
+		 (happy_var_1
+	)}
+
+happyReduce_186 = happySpecReduce_0  98# happyReduction_186
+happyReduction_186  =  happyIn104
+		 (Nothing
+	)
+
+happyReduce_187 = happyReduce 4# 98# happyReduction_187
+happyReduction_187 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut108 happy_x_2 of { happy_var_2 -> 
+	case happyOut103 happy_x_4 of { happy_var_4 -> 
+	happyIn104
+		 (Just (happy_var_2, happy_var_4)
+	) `HappyStk` happyRest}}
+
+happyReduce_188 = happySpecReduce_1  99# happyReduction_188
+happyReduction_188 happy_x_1
+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> 
+	happyIn105
+		 (happy_var_1
+	)}
+
+happyReduce_189 = happySpecReduce_1  99# happyReduction_189
+happyReduction_189 happy_x_1
+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> 
+	happyIn105
+		 (happy_var_1
+	)}
+
+happyReduce_190 = happyReduce 4# 100# happyReduction_190
+happyReduction_190 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_2 of { happy_var_2 -> 
+	case happyOut103 happy_x_4 of { happy_var_4 -> 
+	happyIn106
+		 (AST.Lambda happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_191 = happyReduce 4# 101# happyReduction_191
+happyReduction_191 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut31 happy_x_2 of { happy_var_2 -> 
+	case happyOut105 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AST.Lambda happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_192 = happySpecReduce_2  102# happyReduction_192
+happyReduction_192 happy_x_2
+	happy_x_1
+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> 
+	case happyOut109 happy_x_2 of { happy_var_2 -> 
+	happyIn108
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_193 = happySpecReduce_0  103# happyReduction_193
+happyReduction_193  =  happyIn109
+		 ([]
+	)
+
+happyReduce_194 = happySpecReduce_3  103# happyReduction_194
+happyReduction_194 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> 
+	case happyOut110 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 ((AST.Or, happy_var_3) : happy_var_1
+	)}}
+
+happyReduce_195 = happySpecReduce_2  104# happyReduction_195
+happyReduction_195 happy_x_2
+	happy_x_1
+	 =  case happyOut112 happy_x_1 of { happy_var_1 -> 
+	case happyOut111 happy_x_2 of { happy_var_2 -> 
+	happyIn110
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_196 = happySpecReduce_0  105# happyReduction_196
+happyReduction_196  =  happyIn111
+		 ([]
+	)
+
+happyReduce_197 = happySpecReduce_3  105# happyReduction_197
+happyReduction_197 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut111 happy_x_1 of { happy_var_1 -> 
+	case happyOut112 happy_x_3 of { happy_var_3 -> 
+	happyIn111
+		 ((AST.And, happy_var_3) : happy_var_1
+	)}}
+
+happyReduce_198 = happySpecReduce_2  106# happyReduction_198
+happyReduction_198 happy_x_2
+	happy_x_1
+	 =  case happyOut112 happy_x_2 of { happy_var_2 -> 
+	happyIn112
+		 (UnaryOp {operator = AST.Not, op_arg = happy_var_2}
+	)}
+
+happyReduce_199 = happySpecReduce_1  106# happyReduction_199
+happyReduction_199 happy_x_1
+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> 
+	happyIn112
+		 (happy_var_1
+	)}
+
+happyReduce_200 = happySpecReduce_2  107# happyReduction_200
+happyReduction_200 happy_x_2
+	happy_x_1
+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> 
+	case happyOut114 happy_x_2 of { happy_var_2 -> 
+	happyIn113
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_201 = happySpecReduce_0  108# happyReduction_201
+happyReduction_201  =  happyIn114
+		 ([]
+	)
+
+happyReduce_202 = happySpecReduce_3  108# happyReduction_202
+happyReduction_202 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> 
+	case happyOut115 happy_x_2 of { happy_var_2 -> 
+	case happyOut118 happy_x_3 of { happy_var_3 -> 
+	happyIn114
+		 ((happy_var_2, happy_var_3) : happy_var_1
+	)}}}
+
+happyReduce_203 = happySpecReduce_1  109# happyReduction_203
+happyReduction_203 happy_x_1
+	 =  happyIn115
+		 (AST.LessThan
+	)
+
+happyReduce_204 = happySpecReduce_1  109# happyReduction_204
+happyReduction_204 happy_x_1
+	 =  happyIn115
+		 (AST.GreaterThan
+	)
+
+happyReduce_205 = happySpecReduce_1  109# happyReduction_205
+happyReduction_205 happy_x_1
+	 =  happyIn115
+		 (AST.Equality
+	)
+
+happyReduce_206 = happySpecReduce_1  109# happyReduction_206
+happyReduction_206 happy_x_1
+	 =  happyIn115
+		 (AST.GreaterThanEquals
+	)
+
+happyReduce_207 = happySpecReduce_1  109# happyReduction_207
+happyReduction_207 happy_x_1
+	 =  happyIn115
+		 (AST.LessThanEquals
+	)
+
+happyReduce_208 = happySpecReduce_1  109# happyReduction_208
+happyReduction_208 happy_x_1
+	 =  happyIn115
+		 (AST.NotEquals
+	)
+
+happyReduce_209 = happySpecReduce_1  109# happyReduction_209
+happyReduction_209 happy_x_1
+	 =  happyIn115
+		 (AST.In
+	)
+
+happyReduce_210 = happySpecReduce_2  109# happyReduction_210
+happyReduction_210 happy_x_2
+	happy_x_1
+	 =  happyIn115
+		 (AST.NotIn
+	)
+
+happyReduce_211 = happySpecReduce_1  109# happyReduction_211
+happyReduction_211 happy_x_1
+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> 
+	happyIn115
+		 (happy_var_1
+	)}
+
+happyReduce_212 = happySpecReduce_2  110# happyReduction_212
+happyReduction_212 happy_x_2
+	happy_x_1
+	 =  case happyOut117 happy_x_2 of { happy_var_2 -> 
+	happyIn116
+		 (happy_var_2
+	)}
+
+happyReduce_213 = happySpecReduce_0  111# happyReduction_213
+happyReduction_213  =  happyIn117
+		 (AST.Is
+	)
+
+happyReduce_214 = happySpecReduce_1  111# happyReduction_214
+happyReduction_214 happy_x_1
+	 =  happyIn117
+		 (AST.IsNot
+	)
+
+happyReduce_215 = happySpecReduce_1  112# happyReduction_215
+happyReduction_215 happy_x_1
+	 =  case happyOut119 happy_x_1 of { happy_var_1 -> 
+	happyIn118
+		 (happy_var_1
+	)}
+
+happyReduce_216 = happySpecReduce_2  113# happyReduction_216
+happyReduction_216 happy_x_2
+	happy_x_1
+	 =  case happyOut121 happy_x_1 of { happy_var_1 -> 
+	case happyOut120 happy_x_2 of { happy_var_2 -> 
+	happyIn119
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_217 = happySpecReduce_0  114# happyReduction_217
+happyReduction_217  =  happyIn120
+		 ([]
+	)
+
+happyReduce_218 = happySpecReduce_3  114# happyReduction_218
+happyReduction_218 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> 
+	case happyOut121 happy_x_3 of { happy_var_3 -> 
+	happyIn120
+		 ((AST.BinaryOr, happy_var_3) : happy_var_1
+	)}}
+
+happyReduce_219 = happySpecReduce_2  115# happyReduction_219
+happyReduction_219 happy_x_2
+	happy_x_1
+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> 
+	case happyOut122 happy_x_2 of { happy_var_2 -> 
+	happyIn121
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_220 = happySpecReduce_0  116# happyReduction_220
+happyReduction_220  =  happyIn122
+		 ([]
+	)
+
+happyReduce_221 = happySpecReduce_3  116# happyReduction_221
+happyReduction_221 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut122 happy_x_1 of { happy_var_1 -> 
+	case happyOut123 happy_x_3 of { happy_var_3 -> 
+	happyIn122
+		 ((AST.Xor, happy_var_3) : happy_var_1
+	)}}
+
+happyReduce_222 = happySpecReduce_2  117# happyReduction_222
+happyReduction_222 happy_x_2
+	happy_x_1
+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> 
+	case happyOut124 happy_x_2 of { happy_var_2 -> 
+	happyIn123
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_223 = happySpecReduce_0  118# happyReduction_223
+happyReduction_223  =  happyIn124
+		 ([]
+	)
+
+happyReduce_224 = happySpecReduce_3  118# happyReduction_224
+happyReduction_224 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> 
+	case happyOut125 happy_x_3 of { happy_var_3 -> 
+	happyIn124
+		 ((AST.BinaryAnd, happy_var_3) : happy_var_1
+	)}}
+
+happyReduce_225 = happySpecReduce_2  119# happyReduction_225
+happyReduction_225 happy_x_2
+	happy_x_1
+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> 
+	case happyOut126 happy_x_2 of { happy_var_2 -> 
+	happyIn125
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_226 = happySpecReduce_0  120# happyReduction_226
+happyReduction_226  =  happyIn126
+		 ([]
+	)
+
+happyReduce_227 = happySpecReduce_3  120# happyReduction_227
+happyReduction_227 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> 
+	case happyOut127 happy_x_2 of { happy_var_2 -> 
+	case happyOut128 happy_x_3 of { happy_var_3 -> 
+	happyIn126
+		 ((happy_var_2, happy_var_3) : happy_var_1
+	)}}}
+
+happyReduce_228 = happySpecReduce_1  121# happyReduction_228
+happyReduction_228 happy_x_1
+	 =  happyIn127
+		 (AST.ShiftLeft
+	)
+
+happyReduce_229 = happySpecReduce_1  121# happyReduction_229
+happyReduction_229 happy_x_1
+	 =  happyIn127
+		 (AST.ShiftRight
+	)
+
+happyReduce_230 = happySpecReduce_2  122# happyReduction_230
+happyReduction_230 happy_x_2
+	happy_x_1
+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> 
+	case happyOut129 happy_x_2 of { happy_var_2 -> 
+	happyIn128
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_231 = happySpecReduce_0  123# happyReduction_231
+happyReduction_231  =  happyIn129
+		 ([]
+	)
+
+happyReduce_232 = happySpecReduce_3  123# happyReduction_232
+happyReduction_232 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> 
+	case happyOut130 happy_x_2 of { happy_var_2 -> 
+	case happyOut131 happy_x_3 of { happy_var_3 -> 
+	happyIn129
+		 ((happy_var_2, happy_var_3) : happy_var_1
+	)}}}
+
+happyReduce_233 = happySpecReduce_1  124# happyReduction_233
+happyReduction_233 happy_x_1
+	 =  happyIn130
+		 (AST.Plus
+	)
+
+happyReduce_234 = happySpecReduce_1  124# happyReduction_234
+happyReduction_234 happy_x_1
+	 =  happyIn130
+		 (AST.Minus
+	)
+
+happyReduce_235 = happySpecReduce_2  125# happyReduction_235
+happyReduction_235 happy_x_2
+	happy_x_1
+	 =  case happyOut134 happy_x_1 of { happy_var_1 -> 
+	case happyOut132 happy_x_2 of { happy_var_2 -> 
+	happyIn131
+		 (makeBinOp happy_var_1 happy_var_2
+	)}}
+
+happyReduce_236 = happySpecReduce_0  126# happyReduction_236
+happyReduction_236  =  happyIn132
+		 ([]
+	)
+
+happyReduce_237 = happySpecReduce_3  126# happyReduction_237
+happyReduction_237 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut132 happy_x_1 of { happy_var_1 -> 
+	case happyOut133 happy_x_2 of { happy_var_2 -> 
+	case happyOut134 happy_x_3 of { happy_var_3 -> 
+	happyIn132
+		 ((happy_var_2, happy_var_3) : happy_var_1
+	)}}}
+
+happyReduce_238 = happySpecReduce_1  127# happyReduction_238
+happyReduction_238 happy_x_1
+	 =  happyIn133
+		 (AST.Multiply
+	)
+
+happyReduce_239 = happySpecReduce_1  127# happyReduction_239
+happyReduction_239 happy_x_1
+	 =  happyIn133
+		 (AST.Divide
+	)
+
+happyReduce_240 = happySpecReduce_1  127# happyReduction_240
+happyReduction_240 happy_x_1
+	 =  happyIn133
+		 (AST.Modulo
+	)
+
+happyReduce_241 = happySpecReduce_1  127# happyReduction_241
+happyReduction_241 happy_x_1
+	 =  happyIn133
+		 (AST.FloorDivide
+	)
+
+happyReduce_242 = happySpecReduce_2  128# happyReduction_242
+happyReduction_242 happy_x_2
+	happy_x_1
+	 =  case happyOut134 happy_x_2 of { happy_var_2 -> 
+	happyIn134
+		 (UnaryOp { operator = AST.Plus, op_arg = happy_var_2 }
+	)}
+
+happyReduce_243 = happySpecReduce_2  128# happyReduction_243
+happyReduction_243 happy_x_2
+	happy_x_1
+	 =  case happyOut134 happy_x_2 of { happy_var_2 -> 
+	happyIn134
+		 (UnaryOp { operator = AST.Minus, op_arg = happy_var_2 }
+	)}
+
+happyReduce_244 = happySpecReduce_2  128# happyReduction_244
+happyReduction_244 happy_x_2
+	happy_x_1
+	 =  case happyOut134 happy_x_2 of { happy_var_2 -> 
+	happyIn134
+		 (UnaryOp { operator = AST.Invert, op_arg = happy_var_2 }
+	)}
+
+happyReduce_245 = happySpecReduce_1  128# happyReduction_245
+happyReduction_245 happy_x_1
+	 =  case happyOut135 happy_x_1 of { happy_var_1 -> 
+	happyIn134
+		 (happy_var_1
+	)}
+
+happyReduce_246 = happySpecReduce_2  129# happyReduction_246
+happyReduction_246 happy_x_2
+	happy_x_1
+	 =  case happyOut138 happy_x_1 of { happy_var_1 -> 
+	case happyOut136 happy_x_2 of { happy_var_2 -> 
+	happyIn135
+		 (addTrailer happy_var_1 happy_var_2
+	)}}
+
+happyReduce_247 = happyReduce 4# 129# happyReduction_247
+happyReduction_247 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut138 happy_x_1 of { happy_var_1 -> 
+	case happyOut136 happy_x_2 of { happy_var_2 -> 
+	case happyOut134 happy_x_4 of { happy_var_4 -> 
+	happyIn135
+		 (makeBinOp (addTrailer happy_var_1 happy_var_2) [(AST.Exponent, happy_var_4)]
+	) `HappyStk` happyRest}}}
+
+happyReduce_248 = happySpecReduce_1  130# happyReduction_248
+happyReduction_248 happy_x_1
+	 =  case happyOut137 happy_x_1 of { happy_var_1 -> 
+	happyIn136
+		 (reverse happy_var_1
+	)}
+
+happyReduce_249 = happySpecReduce_0  131# happyReduction_249
+happyReduction_249  =  happyIn137
+		 ([]
+	)
+
+happyReduce_250 = happySpecReduce_2  131# happyReduction_250
+happyReduction_250 happy_x_2
+	happy_x_1
+	 =  case happyOut137 happy_x_1 of { happy_var_1 -> 
+	case happyOut146 happy_x_2 of { happy_var_2 -> 
+	happyIn137
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_251 = happySpecReduce_1  132# happyReduction_251
+happyReduction_251 happy_x_1
+	 =  case happyOut139 happy_x_1 of { happy_var_1 -> 
+	happyIn138
+		 (happy_var_1
+	)}
+
+happyReduce_252 = happySpecReduce_1  132# happyReduction_252
+happyReduction_252 happy_x_1
+	 =  case happyOut140 happy_x_1 of { happy_var_1 -> 
+	happyIn138
+		 (happy_var_1
+	)}
+
+happyReduce_253 = happySpecReduce_1  132# happyReduction_253
+happyReduction_253 happy_x_1
+	 =  case happyOut141 happy_x_1 of { happy_var_1 -> 
+	happyIn138
+		 (happy_var_1
+	)}
+
+happyReduce_254 = happySpecReduce_1  132# happyReduction_254
+happyReduction_254 happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	happyIn138
+		 (AST.Var happy_var_1
+	)}
+
+happyReduce_255 = happySpecReduce_1  132# happyReduction_255
+happyReduction_255 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.Integer _ happy_var_1) -> 
+	happyIn138
+		 (AST.Int happy_var_1
+	)}
+
+happyReduce_256 = happySpecReduce_1  132# happyReduction_256
+happyReduction_256 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.Float _ happy_var_1) -> 
+	happyIn138
+		 (AST.Float happy_var_1
+	)}
+
+happyReduce_257 = happySpecReduce_1  132# happyReduction_257
+happyReduction_257 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.Imaginary _ happy_var_1) -> 
+	happyIn138
+		 (AST.Imaginary { imaginary_value = happy_var_1 }
+	)}
+
+happyReduce_258 = happySpecReduce_1  132# happyReduction_258
+happyReduction_258 happy_x_1
+	 =  case happyOut143 happy_x_1 of { happy_var_1 -> 
+	happyIn138
+		 (AST.Strings (reverse happy_var_1)
+	)}
+
+happyReduce_259 = happySpecReduce_1  132# happyReduction_259
+happyReduction_259 happy_x_1
+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> 
+	happyIn138
+		 (AST.ByteStrings (reverse happy_var_1)
+	)}
+
+happyReduce_260 = happySpecReduce_1  132# happyReduction_260
+happyReduction_260 happy_x_1
+	 =  happyIn138
+		 (AST.Ellipsis
+	)
+
+happyReduce_261 = happySpecReduce_1  132# happyReduction_261
+happyReduction_261 happy_x_1
+	 =  happyIn138
+		 (AST.None
+	)
+
+happyReduce_262 = happySpecReduce_1  132# happyReduction_262
+happyReduction_262 happy_x_1
+	 =  happyIn138
+		 (AST.Bool Prelude.True
+	)
+
+happyReduce_263 = happySpecReduce_1  132# happyReduction_263
+happyReduction_263 happy_x_1
+	 =  happyIn138
+		 (AST.Bool Prelude.False
+	)
+
+happyReduce_264 = happySpecReduce_3  133# happyReduction_264
+happyReduction_264 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut142 happy_x_2 of { happy_var_2 -> 
+	happyIn139
+		 (happy_var_2
+	)}
+
+happyReduce_265 = happySpecReduce_2  134# happyReduction_265
+happyReduction_265 happy_x_2
+	happy_x_1
+	 =  happyIn140
+		 (List { list_exprs = [] }
+	)
+
+happyReduce_266 = happySpecReduce_3  134# happyReduction_266
+happyReduction_266 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut145 happy_x_2 of { happy_var_2 -> 
+	happyIn140
+		 (makeListForm happy_var_2
+	)}
+
+happyReduce_267 = happySpecReduce_2  135# happyReduction_267
+happyReduction_267 happy_x_2
+	happy_x_1
+	 =  happyIn141
+		 (Dictionary { dict_mappings = [] }
+	)
+
+happyReduce_268 = happySpecReduce_3  135# happyReduction_268
+happyReduction_268 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut158 happy_x_2 of { happy_var_2 -> 
+	happyIn141
+		 (happy_var_2
+	)}
+
+happyReduce_269 = happySpecReduce_0  136# happyReduction_269
+happyReduction_269  =  happyIn142
+		 (Tuple { tuple_exprs = [] }
+	)
+
+happyReduce_270 = happySpecReduce_1  136# happyReduction_270
+happyReduction_270 happy_x_1
+	 =  case happyOut172 happy_x_1 of { happy_var_1 -> 
+	happyIn142
+		 (happy_var_1
+	)}
+
+happyReduce_271 = happySpecReduce_1  136# happyReduction_271
+happyReduction_271 happy_x_1
+	 =  case happyOut145 happy_x_1 of { happy_var_1 -> 
+	happyIn142
+		 (either id (\c -> Generator { gen_comprehension = c }) happy_var_1
+	)}
+
+happyReduce_272 = happySpecReduce_1  137# happyReduction_272
+happyReduction_272 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.String _ happy_var_1) -> 
+	happyIn143
+		 ([happy_var_1]
+	)}
+
+happyReduce_273 = happySpecReduce_2  137# happyReduction_273
+happyReduction_273 happy_x_2
+	happy_x_1
+	 =  case happyOut143 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (Token.String _ happy_var_2) -> 
+	happyIn143
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_274 = happySpecReduce_1  138# happyReduction_274
+happyReduction_274 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Token.ByteString _ happy_var_1) -> 
+	happyIn144
+		 ([happy_var_1]
+	)}
+
+happyReduce_275 = happySpecReduce_2  138# happyReduction_275
+happyReduction_275 happy_x_2
+	happy_x_1
+	 =  case happyOut144 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (Token.ByteString _ happy_var_2) -> 
+	happyIn144
+		 (happy_var_2 : happy_var_1
+	)}}
+
+happyReduce_276 = happySpecReduce_1  139# happyReduction_276
+happyReduction_276 happy_x_1
+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> 
+	happyIn145
+		 (Left happy_var_1
+	)}
+
+happyReduce_277 = happySpecReduce_2  139# happyReduction_277
+happyReduction_277 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	case happyOut169 happy_x_2 of { happy_var_2 -> 
+	happyIn145
+		 (Right (makeComprehension happy_var_1 happy_var_2)
+	)}}
+
+happyReduce_278 = happySpecReduce_3  140# happyReduction_278
+happyReduction_278 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut165 happy_x_2 of { happy_var_2 -> 
+	happyIn146
+		 (TrailerCall happy_var_2
+	)}
+
+happyReduce_279 = happySpecReduce_3  140# happyReduction_279
+happyReduction_279 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut147 happy_x_2 of { happy_var_2 -> 
+	happyIn146
+		 (TrailerSubscript happy_var_2
+	)}
+
+happyReduce_280 = happySpecReduce_2  140# happyReduction_280
+happyReduction_280 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn146
+		 (TrailerDot happy_var_2
+	)}
+
+happyReduce_281 = happySpecReduce_2  141# happyReduction_281
+happyReduction_281 happy_x_2
+	happy_x_1
+	 =  case happyOut148 happy_x_1 of { happy_var_1 -> 
+	happyIn147
+		 (reverse happy_var_1
+	)}
+
+happyReduce_282 = happySpecReduce_1  142# happyReduction_282
+happyReduction_282 happy_x_1
+	 =  case happyOut149 happy_x_1 of { happy_var_1 -> 
+	happyIn148
+		 ([happy_var_1]
+	)}
+
+happyReduce_283 = happySpecReduce_3  142# happyReduction_283
+happyReduction_283 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut148 happy_x_1 of { happy_var_1 -> 
+	case happyOut149 happy_x_3 of { happy_var_3 -> 
+	happyIn148
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_284 = happySpecReduce_1  143# happyReduction_284
+happyReduction_284 happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	happyIn149
+		 (SubscriptExpr happy_var_1
+	)}
+
+happyReduce_285 = happyReduce 4# 143# happyReduction_285
+happyReduction_285 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut150 happy_x_1 of { happy_var_1 -> 
+	case happyOut150 happy_x_3 of { happy_var_3 -> 
+	case happyOut151 happy_x_4 of { happy_var_4 -> 
+	happyIn149
+		 (SubscriptSlice happy_var_1 happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_286 = happySpecReduce_0  144# happyReduction_286
+happyReduction_286  =  happyIn150
+		 (Nothing
+	)
+
+happyReduce_287 = happySpecReduce_1  144# happyReduction_287
+happyReduction_287 happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	happyIn150
+		 (Just happy_var_1
+	)}
+
+happyReduce_288 = happySpecReduce_0  145# happyReduction_288
+happyReduction_288  =  happyIn151
+		 (Nothing
+	)
+
+happyReduce_289 = happySpecReduce_1  145# happyReduction_289
+happyReduction_289 happy_x_1
+	 =  case happyOut152 happy_x_1 of { happy_var_1 -> 
+	happyIn151
+		 (Just happy_var_1
+	)}
+
+happyReduce_290 = happySpecReduce_2  146# happyReduction_290
+happyReduction_290 happy_x_2
+	happy_x_1
+	 =  case happyOut150 happy_x_2 of { happy_var_2 -> 
+	happyIn152
+		 (happy_var_2
+	)}
+
+happyReduce_291 = happySpecReduce_2  147# happyReduction_291
+happyReduction_291 happy_x_2
+	happy_x_1
+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> 
+	happyIn153
+		 (reverse happy_var_1
+	)}
+
+happyReduce_292 = happySpecReduce_0  148# happyReduction_292
+happyReduction_292  =  happyIn154
+		 (False
+	)
+
+happyReduce_293 = happySpecReduce_1  148# happyReduction_293
+happyReduction_293 happy_x_1
+	 =  happyIn154
+		 (True
+	)
+
+happyReduce_294 = happySpecReduce_1  149# happyReduction_294
+happyReduction_294 happy_x_1
+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> 
+	happyIn155
+		 ([happy_var_1]
+	)}
+
+happyReduce_295 = happySpecReduce_3  149# happyReduction_295
+happyReduction_295 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut155 happy_x_1 of { happy_var_1 -> 
+	case happyOut118 happy_x_3 of { happy_var_3 -> 
+	happyIn155
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_296 = happySpecReduce_2  150# happyReduction_296
+happyReduction_296 happy_x_2
+	happy_x_1
+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> 
+	case happyOut154 happy_x_2 of { happy_var_2 -> 
+	happyIn156
+		 (makeTupleOrExpr (reverse happy_var_1) happy_var_2
+	)}}
+
+happyReduce_297 = happySpecReduce_1  151# happyReduction_297
+happyReduction_297 happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	happyIn157
+		 ([happy_var_1]
+	)}
+
+happyReduce_298 = happySpecReduce_3  151# happyReduction_298
+happyReduction_298 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut157 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_3 of { happy_var_3 -> 
+	happyIn157
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_299 = happyReduce 4# 152# happyReduction_299
+happyReduction_299 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut103 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_3 of { happy_var_3 -> 
+	case happyOut159 happy_x_4 of { happy_var_4 -> 
+	happyIn158
+		 (makeDictionary (happy_var_1, happy_var_3) happy_var_4
+	) `HappyStk` happyRest}}}
+
+happyReduce_300 = happySpecReduce_2  152# happyReduction_300
+happyReduction_300 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	case happyOut161 happy_x_2 of { happy_var_2 -> 
+	happyIn158
+		 (makeSet happy_var_1 happy_var_2
+	)}}
+
+happyReduce_301 = happySpecReduce_1  153# happyReduction_301
+happyReduction_301 happy_x_1
+	 =  case happyOut169 happy_x_1 of { happy_var_1 -> 
+	happyIn159
+		 (Left happy_var_1
+	)}
+
+happyReduce_302 = happySpecReduce_2  153# happyReduction_302
+happyReduction_302 happy_x_2
+	happy_x_1
+	 =  case happyOut160 happy_x_1 of { happy_var_1 -> 
+	happyIn159
+		 (Right (reverse happy_var_1)
+	)}
+
+happyReduce_303 = happySpecReduce_0  154# happyReduction_303
+happyReduction_303  =  happyIn160
+		 ([]
+	)
+
+happyReduce_304 = happyReduce 5# 154# happyReduction_304
+happyReduction_304 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut160 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_3 of { happy_var_3 -> 
+	case happyOut103 happy_x_5 of { happy_var_5 -> 
+	happyIn160
+		 ((happy_var_3,happy_var_5) : happy_var_1
+	) `HappyStk` happyRest}}}
+
+happyReduce_305 = happySpecReduce_1  155# happyReduction_305
+happyReduction_305 happy_x_1
+	 =  case happyOut169 happy_x_1 of { happy_var_1 -> 
+	happyIn161
+		 (Left happy_var_1
+	)}
+
+happyReduce_306 = happySpecReduce_2  155# happyReduction_306
+happyReduction_306 happy_x_2
+	happy_x_1
+	 =  case happyOut162 happy_x_1 of { happy_var_1 -> 
+	happyIn161
+		 (Right (reverse happy_var_1)
+	)}
+
+happyReduce_307 = happySpecReduce_0  156# happyReduction_307
+happyReduction_307  =  happyIn162
+		 ([]
+	)
+
+happyReduce_308 = happySpecReduce_3  156# happyReduction_308
+happyReduction_308 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut162 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_3 of { happy_var_3 -> 
+	happyIn162
+		 (happy_var_3 : happy_var_1
+	)}}
+
+happyReduce_309 = happyReduce 5# 157# happyReduction_309
+happyReduction_309 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut39 happy_x_2 of { happy_var_2 -> 
+	case happyOut164 happy_x_3 of { happy_var_3 -> 
+	case happyOut100 happy_x_5 of { happy_var_5 -> 
+	happyIn163
+		 (AST.Class { class_name = happy_var_2, class_args = happy_var_3, class_body = happy_var_5 }
+	) `HappyStk` happyRest}}}
+
+happyReduce_310 = happySpecReduce_0  158# happyReduction_310
+happyReduction_310  =  happyIn164
+		 ([]
+	)
+
+happyReduce_311 = happySpecReduce_3  158# happyReduction_311
+happyReduction_311 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut165 happy_x_2 of { happy_var_2 -> 
+	happyIn164
+		 (happy_var_2
+	)}
+
+happyReduce_312 = happySpecReduce_0  159# happyReduction_312
+happyReduction_312  =  happyIn165
+		 ([]
+	)
+
+happyReduce_313 = happySpecReduce_2  159# happyReduction_313
+happyReduction_313 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn165
+		 ([ArgVarArgsPos { arg_expr = happy_var_2 }]
+	)}
+
+happyReduce_314 = happySpecReduce_2  159# happyReduction_314
+happyReduction_314 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn165
+		 ([ArgVarArgsKeyword { arg_expr = happy_var_2 }]
+	)}
+
+happyReduce_315 = happySpecReduce_1  159# happyReduction_315
+happyReduction_315 happy_x_1
+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> 
+	happyIn165
+		 ([happy_var_1]
+	)}
+
+happyReduce_316 = happySpecReduce_3  159# happyReduction_316
+happyReduction_316 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> 
+	case happyOut165 happy_x_3 of { happy_var_3 -> 
+	happyIn165
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_317 = happyReduce 4# 159# happyReduction_317
+happyReduction_317 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut103 happy_x_2 of { happy_var_2 -> 
+	case happyOut166 happy_x_4 of { happy_var_4 -> 
+	happyIn165
+		 (ArgVarArgsPos { arg_expr = happy_var_2 } : happy_var_4
+	) `HappyStk` happyRest}}
+
+happyReduce_318 = happySpecReduce_1  160# happyReduction_318
+happyReduction_318 happy_x_1
+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> 
+	happyIn166
+		 ([happy_var_1]
+	)}
+
+happyReduce_319 = happySpecReduce_3  160# happyReduction_319
+happyReduction_319 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut167 happy_x_1 of { happy_var_1 -> 
+	case happyOut166 happy_x_3 of { happy_var_3 -> 
+	happyIn166
+		 (happy_var_1 : happy_var_3
+	)}}
+
+happyReduce_320 = happySpecReduce_2  160# happyReduction_320
+happyReduction_320 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn166
+		 ([ArgVarArgsKeyword { arg_expr = happy_var_2 }]
+	)}
+
+happyReduce_321 = happySpecReduce_3  161# happyReduction_321
+happyReduction_321 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_3 of { happy_var_3 -> 
+	happyIn167
+		 (ArgKeyword { arg_keyword = happy_var_1, arg_expr = happy_var_3 }
+	)}}
+
+happyReduce_322 = happySpecReduce_1  161# happyReduction_322
+happyReduction_322 happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	happyIn167
+		 (ArgExpr { arg_expr = happy_var_1 }
+	)}
+
+happyReduce_323 = happySpecReduce_2  161# happyReduction_323
+happyReduction_323 happy_x_2
+	happy_x_1
+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> 
+	case happyOut169 happy_x_2 of { happy_var_2 -> 
+	happyIn167
+		 (ArgExpr { arg_expr = Generator { gen_comprehension = makeComprehension happy_var_1 happy_var_2 }}
+	)}}
+
+happyReduce_324 = happySpecReduce_1  162# happyReduction_324
+happyReduction_324 happy_x_1
+	 =  case happyOut169 happy_x_1 of { happy_var_1 -> 
+	happyIn168
+		 (IterFor happy_var_1
+	)}
+
+happyReduce_325 = happySpecReduce_1  162# happyReduction_325
+happyReduction_325 happy_x_1
+	 =  case happyOut171 happy_x_1 of { happy_var_1 -> 
+	happyIn168
+		 (IterIf happy_var_1
+	)}
+
+happyReduce_326 = happyReduce 5# 163# happyReduction_326
+happyReduction_326 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut153 happy_x_2 of { happy_var_2 -> 
+	case happyOut108 happy_x_4 of { happy_var_4 -> 
+	case happyOut170 happy_x_5 of { happy_var_5 -> 
+	happyIn169
+		 (CompFor { comp_for_exprs = happy_var_2, comp_in_expr = happy_var_4, comp_for_iter = happy_var_5 }
+	) `HappyStk` happyRest}}}
+
+happyReduce_327 = happySpecReduce_0  164# happyReduction_327
+happyReduction_327  =  happyIn170
+		 (Nothing
+	)
+
+happyReduce_328 = happySpecReduce_1  164# happyReduction_328
+happyReduction_328 happy_x_1
+	 =  case happyOut168 happy_x_1 of { happy_var_1 -> 
+	happyIn170
+		 (Just happy_var_1
+	)}
+
+happyReduce_329 = happySpecReduce_3  165# happyReduction_329
+happyReduction_329 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut105 happy_x_2 of { happy_var_2 -> 
+	case happyOut170 happy_x_3 of { happy_var_3 -> 
+	happyIn171
+		 (CompIf { comp_if = happy_var_2, comp_if_iter = happy_var_3 }
+	)}}
+
+happyReduce_330 = happySpecReduce_2  166# happyReduction_330
+happyReduction_330 happy_x_2
+	happy_x_1
+	 =  case happyOut173 happy_x_2 of { happy_var_2 -> 
+	happyIn172
+		 (AST.Yield { yield_expr = happy_var_2 }
+	)}
+
+happyReduce_331 = happySpecReduce_0  167# happyReduction_331
+happyReduction_331  =  happyIn173
+		 (Nothing
+	)
+
+happyReduce_332 = happySpecReduce_1  167# happyReduction_332
+happyReduction_332 happy_x_1
+	 =  case happyOut156 happy_x_1 of { happy_var_1 -> 
+	happyIn173
+		 (Just happy_var_1
+	)}
+
+happyNewToken action sts stk
+	= lexCont(\tk -> 
+	let cont i = happyDoAction i tk action sts stk in
+	case tk of {
+	Token.EOF -> happyDoAction 89# tk action sts stk;
+	Token.Import _ -> cont 1#;
+	Token.Identifier _ happy_dollar_dollar -> cont 2#;
+	Token.String _ happy_dollar_dollar -> cont 3#;
+	Token.ByteString _ happy_dollar_dollar -> cont 4#;
+	Token.Integer _ happy_dollar_dollar -> cont 5#;
+	Token.Float _ happy_dollar_dollar -> cont 6#;
+	Token.Imaginary _ happy_dollar_dollar -> cont 7#;
+	Token.Assign _ -> cont 8#;
+	Token.LeftRoundBracket _ -> cont 9#;
+	Token.RightRoundBracket _ -> cont 10#;
+	Token.LeftSquareBracket _ -> cont 11#;
+	Token.RightSquareBracket _ -> cont 12#;
+	Token.LeftBrace _ -> cont 13#;
+	Token.RightBrace _ -> cont 14#;
+	Token.Comma _ -> cont 15#;
+	Token.SemiColon _ -> cont 16#;
+	Token.Colon _ -> cont 17#;
+	Token.Def _ -> cont 18#;
+	Token.Class _ -> cont 19#;
+	Token.While _ -> cont 20#;
+	Token.For _ -> cont 21#;
+	Token.If _ -> cont 22#;
+	Token.With _ -> cont 23#;
+	Token.As _ -> cont 24#;
+	Token.True _ -> cont 25#;
+	Token.False _ -> cont 26#;
+	Token.None _ -> cont 27#;
+	Token.Return _ -> cont 28#;
+	Token.Yield _ -> cont 29#;
+	Token.Indent _ -> cont 30#;
+	Token.Dedent _ -> cont 31#;
+	Token.Newline _ -> cont 32#;
+	Token.Try _ -> cont 33#;
+	Token.Except _ -> cont 34#;
+	Token.Finally _ -> cont 35#;
+	Token.Raise _ -> cont 36#;
+	Token.Plus _ -> cont 37#;
+	Token.Minus _ -> cont 38#;
+	Token.Mult _ -> cont 39#;
+	Token.Div _ -> cont 40#;
+	Token.GreaterThan _ -> cont 41#;
+	Token.LessThan _ -> cont 42#;
+	Token.Equality _ -> cont 43#;
+	Token.GreaterThanEquals _ -> cont 44#;
+	Token.LessThanEquals _ -> cont 45#;
+	Token.And _ -> cont 46#;
+	Token.Or _ -> cont 47#;
+	Token.Exponent _ -> cont 48#;
+	Token.Pass _ -> cont 49#;
+	Token.Break _ -> cont 50#;
+	Token.Continue _ -> cont 51#;
+	Token.Delete _ -> cont 52#;
+	Token.Else _ -> cont 53#;
+	Token.Elif _ -> cont 54#;
+	Token.Not _ -> cont 55#;
+	Token.BinaryOr _ -> cont 56#;
+	Token.Xor _ -> cont 57#;
+	Token.BinaryAnd _ -> cont 58#;
+	Token.ShiftLeft _ -> cont 59#;
+	Token.ShiftRight _ -> cont 60#;
+	Token.Modulo _ -> cont 61#;
+	Token.FloorDiv _ -> cont 62#;
+	Token.Tilde _ -> cont 63#;
+	Token.NotEquals _ -> cont 64#;
+	Token.In _ -> cont 65#;
+	Token.Is _ -> cont 66#;
+	Token.Lambda _ -> cont 67#;
+	Token.Dot _ -> cont 68#;
+	Token.Ellipsis _ -> cont 69#;
+	Token.PlusAssign _ -> cont 70#;
+	Token.MinusAssign _ -> cont 71#;
+	Token.MultAssign _ -> cont 72#;
+	Token.DivAssign _ -> cont 73#;
+	Token.ModAssign _ -> cont 74#;
+	Token.PowAssign _ -> cont 75#;
+	Token.BinAndAssign _ -> cont 76#;
+	Token.BinOrAssign _ -> cont 77#;
+	Token.BinXorAssign _ -> cont 78#;
+	Token.LeftShiftAssign _ -> cont 79#;
+	Token.RightShiftAssign _ -> cont 80#;
+	Token.FloorDivAssign _ -> cont 81#;
+	Token.At _ -> cont 82#;
+	Token.RightArrow _ -> cont 83#;
+	Token.From _ -> cont 84#;
+	Token.Global _ -> cont 85#;
+	Token.NonLocal _ -> cont 86#;
+	Token.Assert _ -> cont 87#;
+	Token.EOF -> cont 88#;
+	_ -> happyError' tk
+	})
+
+happyError_ tk = happyError' tk
+
+happyThen :: () => P a -> (a -> P b) -> P b
+happyThen = (thenP)
+happyReturn :: () => a -> P a
+happyReturn = (returnP)
+happyThen1 = happyThen
+happyReturn1 :: () => a -> P a
+happyReturn1 = happyReturn
+happyError' :: () => Token -> P a
+happyError' tk = parseError tk
+
+parseFileInput = happySomeParser where
+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut7 x))
+
+parseSingleInput = happySomeParser where
+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut6 x))
+
+parseEval = happySomeParser where
+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut11 x))
+
+happySeq = happyDontSeq
+
+
+-- Put additional Haskell code in here if needed.
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+{-# LINE 1 "<built-in>" #-}
+{-# LINE 1 "<command line>" #-}
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
+
+{-# LINE 28 "templates/GenericTemplate.hs" #-}
+
+
+data Happy_IntList = HappyCons Int# Happy_IntList
+
+
+
+
+
+{-# LINE 49 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 59 "templates/GenericTemplate.hs" #-}
+
+{-# LINE 68 "templates/GenericTemplate.hs" #-}
+
+infixr 9 `HappyStk`
+data HappyStk a = HappyStk a (HappyStk a)
+
+-----------------------------------------------------------------------------
+-- starting the parse
+
+happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
+
+-----------------------------------------------------------------------------
+-- Accepting the parse
+
+-- If the current token is 0#, it means we've just accepted a partial
+-- parse (a %partial parser).  We must ignore the saved token on the top of
+-- the stack in this case.
+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =
+	happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+
+happyDoAction i tk st
+	= {- nothing -}
+
+
+	  case action of
+		0#		  -> {- nothing -}
+				     happyFail i tk st
+		-1# 	  -> {- nothing -}
+				     happyAccept i tk st
+		n | (n <# (0# :: Int#)) -> {- nothing -}
+
+				     (happyReduceArr ! rule) i tk st
+				     where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))
+		n		  -> {- nothing -}
+
+
+				     happyShift new_state i tk st
+				     where new_state = (n -# (1# :: Int#))
+   where off    = indexShortOffAddr happyActOffsets st
+	 off_i  = (off +# i)
+	 check  = if (off_i >=# (0# :: Int#))
+			then (indexShortOffAddr happyCheck off_i ==#  i)
+			else False
+ 	 action | check     = indexShortOffAddr happyTable off_i
+		| otherwise = indexShortOffAddr happyDefActions st
+
+{-# LINE 127 "templates/GenericTemplate.hs" #-}
+
+
+indexShortOffAddr (HappyA# arr) off =
+#if __GLASGOW_HASKELL__ > 500
+	narrow16Int# i
+#elif __GLASGOW_HASKELL__ == 500
+	intToInt16# i
+#else
+	(i `iShiftL#` 16#) `iShiftRA#` 16#
+#endif
+  where
+#if __GLASGOW_HASKELL__ >= 503
+	i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+#else
+	i = word2Int# ((high `shiftL#` 8#) `or#` low)
+#endif
+	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+	low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+	off' = off *# 2#
+
+
+
+
+
+data HappyAddr = HappyA# Addr#
+
+
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+{-# LINE 170 "templates/GenericTemplate.hs" #-}
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
+     let i = (case unsafeCoerce# x of { (I# (i)) -> i }) in
+--     trace "shifting the error token" $
+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happySpecReduce_0 nt fn j tk st@((action)) sts stk
+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k -# (1# :: Int#)) sts of
+	 sts1@((HappyCons (st1@(action)) (_))) ->
+        	let r = fn stk in  -- it doesn't hurt to always seq here...
+       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))
+       where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))
+             drop_stk = happyDropStk k stk
+
+happyMonad2Reduce k nt fn 0# tk st sts stk
+     = happyFail 0# tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+       where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))
+             drop_stk = happyDropStk k stk
+
+             off    = indexShortOffAddr happyGotoOffsets st1
+             off_i  = (off +# nt)
+             new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+happyDrop 0# l = l
+happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t
+
+happyDropStk 0# l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+happyGoto nt j tk st = 
+   {- nothing -}
+   happyDoAction j tk new_state
+   where off    = indexShortOffAddr happyGotoOffsets st
+	 off_i  = (off +# nt)
+ 	 new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+-----------------------------------------------------------------------------
+-- Error recovery (0# is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail  0# tk old_st _ stk =
+--	trace "failing" $ 
+    	happyError_ tk
+
+{-  We don't need state discarding for our restricted implementation of
+    "error".  In fact, it can cause some bogus parses, so I've disabled it
+    for now --SDM
+
+-- discard a state
+happyFail  0# tk old_st (HappyCons ((action)) (sts)) 
+						(saved_tok `HappyStk` _ `HappyStk` stk) =
+--	trace ("discarding state, depth " ++ show (length stk))  $
+	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail  i tk (action) sts stk =
+--      trace "entering error recovery" $
+	happyDoAction 0# tk action sts ( (unsafeCoerce# (I# (i))) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll = error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+happyTcHack :: Int# -> a -> a
+happyTcHack x y = y
+{-# INLINE happyTcHack #-}
+
+
+-----------------------------------------------------------------------------
+-- Seq-ing.  If the --strict flag is given, then Happy emits 
+--	happySeq = happyDoSeq
+-- otherwise it emits
+-- 	happySeq = happyDontSeq
+
+happyDoSeq, happyDontSeq :: a -> b -> b
+happyDoSeq   a b = a `seq` b
+happyDontSeq a b = b
+
+-----------------------------------------------------------------------------
+-- Don't inline any functions from the template.  GHC has a nasty habit
+-- of deciding to inline happyGoto everywhere, which increases the size of
+-- the generated parser quite a bit.
+
+
+{-# NOINLINE happyDoAction #-}
+{-# NOINLINE happyTable #-}
+{-# NOINLINE happyCheck #-}
+{-# NOINLINE happyActOffsets #-}
+{-# NOINLINE happyGotoOffsets #-}
+{-# NOINLINE happyDefActions #-}
+
+{-# NOINLINE happyShift #-}
+{-# NOINLINE happySpecReduce_0 #-}
+{-# NOINLINE happySpecReduce_1 #-}
+{-# NOINLINE happySpecReduce_2 #-}
+{-# NOINLINE happySpecReduce_3 #-}
+{-# NOINLINE happyReduce #-}
+{-# NOINLINE happyMonadReduce #-}
+{-# NOINLINE happyGoto #-}
+{-# NOINLINE happyFail #-}
+
+-- end of Happy Template.
diff --git a/language-python.cabal b/language-python.cabal
new file mode 100644
--- /dev/null
+++ b/language-python.cabal
@@ -0,0 +1,36 @@
+name:                language-python
+version:             0.1.1
+cabal-version:       >= 1.2
+synopsis:            Parsing and pretty printing of Python code. 
+description:         language-python is a Haskell library for parsing and pretty printing
+                     Python code. Currently it only supports Python version 3.0. 
+category:            Language
+license:             BSD3
+license-file:        LICENSE
+copyright:           (c) 2008-2009 Bernard James Pope
+author:              Bernard James Pope 
+maintainer:          bjpop@csse.unimelb.edu.au
+homepage:            http://projects.haskell.org/language-python/
+build-depends:       base
+build-type:          Simple
+stability:           experimental
+extra-source-files:  src/Language/Python/Version3/Parser/Parser.y 
+                     src/Language/Python/Version3/Parser/Lexer.x 
+
+Library
+   hs-source-dirs:   src
+   build-depends:    base, containers, pretty, bytestring, array
+   build-tools:      happy, alex
+   exposed-modules:
+      Language.Python.Data.SrcLocation
+      Language.Python.Version3.Parser
+      Language.Python.Version3.Lexer
+      Language.Python.Version3.Syntax.AST
+      Language.Python.Version3.Syntax.Pretty
+   other-modules:
+      Language.Python.Version3.Parser.Parser
+      Language.Python.Version3.Parser.Lexer
+      Language.Python.Version3.Parser.ParserMonad
+      Language.Python.Version3.Parser.ParserUtils
+      Language.Python.Version3.Parser.Token
+
diff --git a/src/Language/Python/Data/SrcLocation.hs b/src/Language/Python/Data/SrcLocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Data/SrcLocation.hs
@@ -0,0 +1,69 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Data.SrcLocation 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Source location information for the Python parser. 
+-- XXX We will probably move to source spans at some point.
+-----------------------------------------------------------------------------
+
+module Language.Python.Data.SrcLocation (
+  -- * Projection of locations from values 
+  Location (..),
+  -- * Construction 
+  SrcLocation (..),
+  initialSrcLocation,
+  -- * Modification
+  incColumn, 
+  incLine,
+  incTab 
+) where
+
+-- | A location for a syntactic entity from the source code.
+-- The location is specified by its filename, and starting row
+-- and column. 
+data SrcLocation = 
+   Sloc { sloc_filename :: String
+        , sloc_row :: !Int
+        , sloc_column :: !Int 
+        } 
+   | NoLocation
+   deriving (Eq, Ord, Show)
+
+-- | Types which have a source location.
+class Location a where
+   -- | Project the location from a value.
+   location :: a -> SrcLocation 
+   -- | By default a value has no location. 
+   location x = NoLocation
+
+-- | Construct the initial source location for a file.
+initialSrcLocation :: String -> SrcLocation
+initialSrcLocation filename 
+    = Sloc 
+      { sloc_filename = filename
+      , sloc_row = 1
+      , sloc_column = 1
+      }
+
+-- | Increment the column of a location by one. 
+incColumn :: Int -> SrcLocation -> SrcLocation
+incColumn n loc@(Sloc { sloc_column = col })
+   = loc { sloc_column = col + n }
+
+-- | Increment the column of a location by one tab stop.
+incTab :: SrcLocation -> SrcLocation
+incTab loc@(Sloc { sloc_column = col })
+   = loc { sloc_column = newCol } 
+   where
+   newCol = col + 8 - (col - 1) `mod` 8
+
+-- | Increment the line number (row) of a location by one.
+incLine :: Int -> SrcLocation -> SrcLocation
+incLine n loc@(Sloc { sloc_row = row }) 
+   = loc { sloc_column = 1, sloc_row = row + n }
diff --git a/src/Language/Python/Version3/Lexer.hs b/src/Language/Python/Version3/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Lexer.hs
@@ -0,0 +1,61 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Lexer
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- A lexer and set of tokens for Python version 3 programs. 
+-- See: <http://docs.python.org/dev/3.0/reference/lexical_analysis.html>.
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Lexer (
+   -- * Lexical analysis
+   lex, 
+   lexOneToken,
+   -- * Tokens
+   Token(..), 
+   -- * Parse errors
+   ParseError(ParseError)) where
+
+import Prelude hiding (lex)
+import Language.Python.Version3.Parser.Lexer (lexToken, initStartCodeStack)
+import Language.Python.Version3.Parser.Token (Token (..))
+import Language.Python.Data.SrcLocation (initialSrcLocation)
+import Language.Python.Version3.Parser.ParserMonad 
+       (State(input), P, runParser, execParser, ParseError(ParseError), initialState)
+
+-- | Parse a string into a list of Python Tokens, or return an error. 
+lex :: String -- ^ The input stream (python source code). 
+    -> String -- ^ The name of the python source (filename or input device).
+    -> Either ParseError [Token] -- ^ An error or a list of tokens.
+lex input srcName =
+   execParser lexer state
+   where
+   initLoc = initialSrcLocation srcName
+   state = initialState initLoc input initStartCodeStack
+
+-- | Try to lex the first token in an input string. Return either a parse error
+-- or a pair containing the next token and the rest of the input after the token.
+lexOneToken :: String -- ^ The input stream (python source code).
+         -> String -- ^ The name of the python source (filename or input device).
+         -> Either ParseError (Token, String) -- ^ An error or the next token and the rest of the input after the token. 
+lexOneToken source srcName =
+   case runParser lexToken state of
+      Left err -> Left err
+      Right (st, tok) -> Right (tok, input st)
+   where
+   initLoc = initialSrcLocation srcName
+   state = initialState initLoc source initStartCodeStack
+
+lexer :: P [Token]
+lexer = loop []
+   where
+   loop toks = do
+      tok <- lexToken
+      if tok == EOF
+         then return (reverse toks)
+         else loop (tok:toks)
diff --git a/src/Language/Python/Version3/Parser.hs b/src/Language/Python/Version3/Parser.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Parser.hs
@@ -0,0 +1,68 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- A parser for Python version 3 programs. Parsers are provided for 
+-- modules, statements, and expressions. 
+--
+-- See: 
+--
+-- * <http://docs.python.org/dev/3.0/reference/index.html> for an overview of the language. 
+--
+-- * <http://docs.python.org/dev/3.0/reference/grammar.html> for the full grammar.
+-- 
+-- * <http://docs.python.org/dev/3.0/reference/toplevel_components.html> for a description of 
+-- the various Python top-levels, which correspond to the parsers provided here.
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser (
+   -- * Parsing modules
+   parseModule, 
+   -- * Parsing statements
+   parseStmt, 
+   -- * Parsing expressions
+   parseExpr, 
+   -- * Parse errors
+   ParseError(ParseError)) where
+
+import Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval)
+import Language.Python.Version3.Syntax.AST (Module, Statement, Expr)
+import Language.Python.Data.SrcLocation (initialSrcLocation)
+import Language.Python.Version3.Parser.ParserMonad (execParser, ParseError(ParseError), initialState)
+import Language.Python.Version3.Parser.Lexer (initStartCodeStack)
+
+-- | Parse a whole Python source file.
+parseModule :: String -- ^ The input stream (python module source code). 
+      -> String -- ^ The name of the python source (filename or input device). 
+      -> Either ParseError Module -- ^ An error or the abstract syntax tree (AST) of the python module. 
+parseModule input srcName = 
+   execParser parseFileInput state 
+   where
+   initLoc = initialSrcLocation srcName
+   state = initialState initLoc input initStartCodeStack
+
+-- | Parse one compound statement, or a sequence of simple statements. Generally used for interactive input, such as from the command line of an interpreter.
+parseStmt :: String -- ^ The input stream (python statement source code). 
+      -> String -- ^ The name of the python source (filename or input device). 
+      -> Either ParseError [Statement] -- ^ An error or maybe the abstract syntax tree (AST) of zero or more python statements. 
+parseStmt input srcName = 
+   execParser parseSingleInput state 
+   where
+   initLoc = initialSrcLocation srcName
+   state = initialState initLoc input initStartCodeStack
+
+-- | Parse an expression. Generally used as input for the \'eval\' primitive. 
+parseExpr :: String -- ^ The input stream (python statement source code). 
+      -> String -- ^ The name of the python source (filename or input device). 
+      -> Either ParseError Expr -- ^ An error or maybe the abstract syntax tree (AST) of the python expression. 
+parseExpr input srcName = 
+   execParser parseEval state 
+   where
+   initLoc = initialSrcLocation srcName
+   state = initialState initLoc input initStartCodeStack
diff --git a/src/Language/Python/Version3/Parser/Lexer.x b/src/Language/Python/Version3/Parser/Lexer.x
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Parser/Lexer.x
@@ -0,0 +1,485 @@
+{
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.Lexer 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Implementation of a lexer for Python version 3 programs. Generated by
+-- alex. 
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.Lexer 
+   (initStartCodeStack, lexToken, endOfFileToken, lexCont) where
+
+import Language.Python.Version3.Parser.Token hiding (True, False)
+import qualified Language.Python.Version3.Parser.Token as Token
+import Language.Python.Version3.Parser.ParserMonad hiding (location)
+import Language.Python.Data.SrcLocation
+import qualified Data.Map as Map
+import Control.Monad (liftM)
+import Data.List (foldl')
+import Numeric (readHex, readOct)
+import qualified Data.ByteString.Char8 as BS (pack)
+}
+
+-- character sets
+$lf = \n  -- line feed
+$cr = \r  -- carriage return
+$eol_char = [$lf $cr] -- any end of line character
+$not_eol_char = ~$eol_char -- anything but an end of line character
+$white_char   = [\ \n\r\f\v\t]
+$white_no_nl = $white_char # $eol_char
+$ident_letter = [a-zA-Z_]
+$digit    = 0-9
+$non_zero_digit = 1-9
+$oct_digit = 0-7
+$hex_digit = [$digit a-fA-F]
+$bin_digit = 0-1 
+$short_str_char = [^ \n \r ' \" \\]
+$long_str_char = [. \n] # [' \"]
+$short_byte_str_char = \0-\127 # [\n \r ' \" \\]
+$long_byte_str_char = \0-\127 # [' \"]
+$not_single_quote = [. \n] # '
+$not_double_quote = [. \n] # \"
+
+-- macro definitions
+@exponent = (e | E) (\+ | \-)? $digit+ 
+@fraction = \. $digit+
+@int_part = $digit+
+@point_float = (@int_part? @fraction) | @int_part \.
+@exponent_float = (@int_part | @point_float) @exponent
+@float_number = @point_float | @exponent_float
+@eol_pattern = $lf | $cr $lf | $cr $lf  
+@one_single_quote = ' $not_single_quote
+@two_single_quotes = '' $not_single_quote
+@one_double_quote = \" $not_double_quote
+@two_double_quotes = \"\" $not_double_quote
+@byte_str_prefix = b | B
+@raw_str_prefix = r | R
+@raw_byte_str_prefix = @byte_str_prefix @raw_str_prefix
+@backslash_pair = \\ (\\|'|\"|@eol_pattern|$short_str_char)
+@backslash_pair_bs = \\ (\\|'|\"|@eol_pattern|$short_byte_str_char)
+@short_str_item_single = $short_str_char|@backslash_pair|\"
+@short_str_item_double = $short_str_char|@backslash_pair|'
+@short_byte_str_item_single = $short_byte_str_char|@backslash_pair_bs|\"
+@short_byte_str_item_double = $short_byte_str_char|@backslash_pair_bs|'
+@long_str_item_single = $long_str_char|@backslash_pair|@one_single_quote|@two_single_quotes|\"
+@long_str_item_double = $long_str_char|@backslash_pair|@one_double_quote|@two_double_quotes|'
+@long_byte_str_item_single = $long_byte_str_char|@backslash_pair_bs|@one_single_quote|@two_single_quotes|\"
+@long_byte_str_item_double = $long_byte_str_char|@backslash_pair_bs|@one_double_quote|@two_double_quotes|'
+
+tokens :-
+
+-- these rules below could match inside a string literal, but they
+-- will not be applied because the rule for the literal will always
+-- match a longer sequence of characters. 
+
+\# ($not_eol_char)* ;  -- skip comments 
+$white_no_nl+  ;  -- skip whitespace 
+
+\\ @eol_pattern ; -- line join 
+
+<0> {
+   @float_number { token Token.Float readFloat }
+   $non_zero_digit $digit* { token Token.Integer read }  
+   (@float_number | @int_part) (j | J) { token Token.Imaginary (readFloat.init) }
+   0+ { token Token.Integer read }  
+   0 (o | O) $oct_digit+ { token Token.Integer read }
+   0 (x | X) $hex_digit+ { token Token.Integer read }
+   0 (b | B) $bin_digit+ { token Token.Integer readBinary }
+}
+
+-- String literals 
+
+<0> {
+   ' @short_str_item_single* ' { mkString 1 1 stringToken }
+   @raw_str_prefix ' @short_str_item_single* ' { mkString 2 1 rawStringToken }
+   @byte_str_prefix ' @short_byte_str_item_single* ' { mkString 2 1 byteStringToken }
+   @raw_byte_str_prefix ' @short_byte_str_item_single* ' { mkString 3 1 rawByteStringToken }
+
+   \" @short_str_item_double* \" { mkString 1 1 stringToken }
+   @raw_str_prefix \" @short_str_item_double* \" { mkString 2 1 rawStringToken }
+   @byte_str_prefix \" @short_byte_str_item_double* \" { mkString 2 1 byteStringToken }
+   @raw_byte_str_prefix \" @short_byte_str_item_double* \" { mkString 3 1 rawByteStringToken }
+
+   ''' @long_str_item_single* ''' { mkString 3 3 stringToken }
+   @raw_str_prefix ''' @long_str_item_single* ''' { mkString 4 3 rawStringToken }
+   @byte_str_prefix ''' @long_byte_str_item_single* ''' { mkString 4 3 byteStringToken }
+   @raw_byte_str_prefix ''' @long_byte_str_item_single* ''' { mkString 5 3 rawByteStringToken }
+
+   \"\"\" @long_str_item_double* \"\"\" { mkString 3 3 stringToken }
+   @raw_str_prefix \"\"\" @long_str_item_double* \"\"\" { mkString 4 3 rawStringToken }
+   @byte_str_prefix \"\"\" @long_byte_str_item_double* \"\"\" { mkString 4 3 byteStringToken }
+   @raw_byte_str_prefix \"\"\" @long_byte_str_item_double* \"\"\" { mkString 5 3 rawByteStringToken }
+}
+
+<0> {
+   @eol_pattern     { begin bol }  
+}
+
+<dedent> ()                             { dedentation }
+
+-- beginning of line
+<bol> {
+   @eol_pattern                         ;
+   ()                                   { indentation BOL }
+}
+
+-- beginning of file
+<bof> {
+   @eol_pattern                         ;
+   ()                                   { indentation BOF }
+}
+
+
+<0> $ident_letter($ident_letter|$digit)*  { \loc len str -> keywordOrIdent (take len str) loc }
+
+-- operators and separators
+--
+<0> {
+    "("   { openParen Token.LeftRoundBracket }
+    ")"   { closeParen Token.RightRoundBracket }
+    "["   { openParen Token.LeftSquareBracket }
+    "]"   { closeParen Token.RightSquareBracket }
+    "{"   { openParen Token.LeftBrace }
+    "}"   { closeParen Token.RightBrace }
+    "->"  { symbolToken Token.RightArrow }
+    "."   { symbolToken Token.Dot }
+    "..." { symbolToken Token.Ellipsis }
+    "~"   { symbolToken Token.Tilde }
+    "+"   { symbolToken Token.Plus }
+    "-"   { symbolToken Token.Minus }
+    "**"  { symbolToken Token.Exponent }
+    "*"   { symbolToken Token.Mult }
+    "/"   { symbolToken Token.Div }
+    "//"  { symbolToken Token.FloorDiv }
+    "%"   { symbolToken Token.Modulo }
+    "<<"  { symbolToken Token.ShiftLeft }
+    ">>"  { symbolToken Token.ShiftRight }
+    "<"   { symbolToken Token.LessThan }
+    "<="  { symbolToken Token.LessThanEquals }
+    ">"   { symbolToken Token.GreaterThan }
+    ">="  { symbolToken Token.GreaterThanEquals }
+    "=="  { symbolToken Token.Equality }
+    "!="  { symbolToken Token.NotEquals }
+    "^"   { symbolToken Token.Xor }
+    "|"   { symbolToken Token.BinaryOr }
+    "&&"  { symbolToken Token.And }
+    "&"   { symbolToken Token.BinaryAnd }
+    "||"  { symbolToken Token.Or }
+    ":"   { symbolToken Token.Colon }
+    "="   { symbolToken Token.Assign }
+    "+="  { symbolToken Token.PlusAssign }
+    "-="  { symbolToken Token.MinusAssign }
+    "*="  { symbolToken Token.MultAssign }
+    "/="  { symbolToken Token.DivAssign }
+    "%="  { symbolToken Token.ModAssign }
+    "**=" { symbolToken Token.PowAssign }
+    "&="  { symbolToken Token.BinAndAssign }
+    "|="  { symbolToken Token.BinOrAssign }
+    "^="  { symbolToken Token.BinXorAssign }
+    "<<=" { symbolToken Token.LeftShiftAssign }
+    ">>=" { symbolToken Token.RightShiftAssign }
+    "//=" { symbolToken Token.FloorDivAssign } 
+    ","   { symbolToken Token.Comma }
+    "@"   { symbolToken Token.At }
+    \;    { symbolToken Token.SemiColon }
+}
+
+{
+-- Functions for building tokens 
+
+type StartCode = Int
+type Action = SrcLocation -> Int -> String -> P Token 
+
+dedentation :: Action
+dedentation loc _len _str = do
+   let endCol = sloc_column loc 
+   topIndent <- getIndent
+   case compare endCol topIndent of
+      EQ -> do popStartCode
+               lexToken 
+      LT -> do popIndent
+               return dedentToken 
+      GT -> failP loc ["indentation error"]
+
+-- Beginning of. BOF = beginning of file, BOL = beginning of line
+data BO = BOF | BOL
+
+indentation :: BO -> Action 
+-- Check if we are at the EOF. If yes, we may need to generate a newline,
+-- in case we came here from BOL (but not BOF).
+indentation bo _loc _len [] = do
+   popStartCode
+   case bo of
+      BOF -> lexToken
+      BOL -> return newlineToken
+indentation bo loc _len _str = do
+   popStartCode
+   parenDepth <- getParenStackDepth
+   if parenDepth > 0
+      then lexToken
+      else do 
+         topIndent <- getIndent
+         let endCol = sloc_column loc 
+         case compare endCol topIndent of
+            EQ -> case bo of
+                     BOF -> lexToken
+                     BOL -> return newlineToken   
+            LT -> do pushStartCode dedent
+                     return newlineToken 
+            GT -> do pushIndent endCol 
+                     return indentToken 
+   where
+   -- the location of the newline is not known here 
+   newlineToken = Newline NoLocation
+   indentToken = Indent loc 
+
+begin :: StartCode -> Action 
+begin code loc len inp = do
+   pushStartCode code
+   lexToken 
+
+symbolToken :: (SrcLocation -> Token) -> Action 
+symbolToken mkToken location _ _ = return (mkToken location)
+
+token_fail :: String -> Action 
+token_fail message location _ _ 
+   = failP location [ "Lexical Error !", message]
+
+token :: (SrcLocation -> a -> Token) -> (String -> a) -> Action 
+token mkToken read location len str 
+   = return $ mkToken location (read $ take len str)
+
+-- a keyword or an identifier (the syntax overlaps)
+keywordOrIdent :: String -> SrcLocation -> P Token
+keywordOrIdent str location
+   = return $ case Map.lookup str keywords of
+         Just symbol -> symbol location
+         Nothing -> Identifier location str  
+
+-- mapping from strings to keywords
+keywords :: Map.Map String (SrcLocation -> Token) 
+keywords = Map.fromList keywordNames 
+
+keywordNames :: [(String, SrcLocation -> Token)]
+keywordNames =
+   [ ("False", Token.False), ("class", Class), ("finally", Finally), ("is", Is), ("return", Return)
+   , ("None", None), ("continue", Continue), ("for", For), ("lambda", Lambda), ("try", Try)
+   , ("True", Token.True), ("def", Def), ("from", From), ("nonlocal", NonLocal), ("while", While)
+   , ("and", And), ("del", Delete), ("global", Global), ("not", Not), ("with", With)
+   , ("as", As), ("elif", Elif), ("if", If), ("or", Or), ("yield", Yield)
+   , ("assert", Assert), ("else", Else), ("import", Import), ("pass", Pass)
+   , ("break", Break), ("except", Except), ("in", In), ("raise", Raise)
+   ]
+
+-- The lexer starts off in the beginning of file state (bof)
+initStartCodeStack :: [Int]
+initStartCodeStack = [bof,0]
+
+-- special tokens for the end of file and end of line
+endOfFileToken :: Token
+endOfFileToken = EOF
+newlineToken = Newline NoLocation
+dedentToken = Dedent NoLocation
+
+-- Test if we are at the end of the line or file
+atEOLorEOF :: a -> AlexInput -> Int -> AlexInput -> Bool
+atEOLorEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) 
+   = null inputAfterToken || nextChar == '\n' || nextChar == '\r'
+   where
+   nextChar = head inputAfterToken 
+
+notEOF :: a -> AlexInput -> Int -> AlexInput -> Bool
+notEOF _user _inputBeforeToken _tokenLength (_loc, inputAfterToken) 
+   = not (null inputAfterToken)
+
+readBinary :: String -> Integer
+readBinary 
+   = toBinary . drop 2 
+   where
+   toBinary = foldl' acc 0
+   acc b '0' = 2 * b
+   acc b '1' = 2 * b + 1
+
+{-
+floatnumber   ::=  pointfloat | exponentfloat
+pointfloat    ::=  [intpart] fraction | intpart "."
+exponentfloat ::=  (intpart | pointfloat) exponent
+intpart       ::=  digit+
+fraction      ::=  "." digit+
+exponent      ::=  ("e" | "E") ["+" | "-"] digit+
+-}
+readFloat :: String -> Double
+readFloat str@('.':cs) = read ('0':readFloatRest str)
+readFloat str = read (readFloatRest str)
+readFloatRest :: String -> String
+readFloatRest [] = []
+readFloatRest ['.'] = ".0"
+readFloatRest (c:cs) = c : readFloatRest cs
+
+mkString :: Int -> Int -> (SrcLocation -> String -> Token) -> Action
+mkString leftSkip rightSkip toToken loc len str = do
+   let contentLen = len - (leftSkip + rightSkip)
+   let contents = take contentLen $ drop leftSkip str
+   -- return $ String loc $ processString contents 
+   return $ toToken loc contents 
+
+stringToken :: SrcLocation -> String -> Token
+stringToken loc str = String loc $ unescapeString str
+
+rawStringToken :: SrcLocation -> String -> Token
+rawStringToken loc str = String loc $ unescapeRawString str
+
+byteStringToken :: SrcLocation -> String -> Token
+byteStringToken loc str = ByteString loc $ BS.pack $ unescapeString str
+
+rawByteStringToken :: SrcLocation -> String -> Token
+rawByteStringToken loc str = ByteString loc $ BS.pack $ unescapeRawString str
+
+openParen :: (SrcLocation -> Token) -> Action
+openParen mkToken loc _len _str = do
+   let token = mkToken loc
+   pushParen token 
+   return token 
+
+closeParen :: (SrcLocation -> Token) -> Action
+closeParen mkToken loc _len _str = do
+  let token = mkToken loc
+  topParen <- getParen
+  case topParen of
+     Nothing -> failP loc err1 
+     Just open -> if matchParen open token 
+                    then popParen >> return token
+                    else failP loc err2
+   where
+   -- XXX fix these error messages
+   err1 = ["Lexical error ! unmatched closing paren"]
+   err2 = ["Lexical error ! unmatched closing paren"]
+
+matchParen :: Token -> Token -> Bool
+matchParen (LeftRoundBracket {}) (RightRoundBracket {}) = True
+matchParen (LeftBrace {}) (RightBrace {}) = True
+matchParen (LeftSquareBracket {}) (RightSquareBracket {}) = True
+matchParen _ _ = False
+
+unescapeString :: String -> String
+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)
+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')
+unescapeString ('\\':'"':cs) = '"' : unescapeString cs -- Double quote (")
+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs -- ASCII Bell (BEL)
+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs -- ASCII Backspace (BS)
+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs -- ASCII Formfeed (FF)
+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs -- ASCII Linefeed (LF)
+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs -- ASCII Carriage Return (CR)
+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs -- ASCII Horizontal Tab (TAB)
+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs -- ASCII Vertical Tab (VT)
+unescapeString ('\\':'\n':cs) = unescapeString cs -- line continuation
+unescapeString ('\\':rest@(o:_))
+   | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest 
+unescapeString ('\\':'x':rest@(h:_))
+   | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest 
+unescapeString (c:cs) = c : unescapeString cs 
+unescapeString [] = []
+
+unescapeRawString :: String -> String
+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')
+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")
+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation
+unescapeRawString (c:cs) = c : unescapeRawString cs
+unescapeRawString [] = []
+
+{- 
+   This is a bit complicated because Python allows between 1 and 3 octal
+   characters after the \, and 1 and 2 hex characters after a \x.
+-}
+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String
+unescapeNumeric n numericDigits readNumeric str
+   = loop n [] str 
+   where
+   loop _ acc [] = [numericToChar acc]
+   loop 0 acc rest
+      = numericToChar acc : unescapeString rest
+   loop n acc (c:cs)
+      | c `elem` numericDigits = loop (n-1) (c:acc) cs
+      | otherwise = numericToChar acc : unescapeString (c:cs)
+   numericToChar :: String -> Char
+   numericToChar = toEnum . readNumeric . reverse
+
+octalDigits, hexDigits :: String
+octalDigits = "01234567"
+hexDigits = "0123456789abcdef"
+ 
+
+-- -----------------------------------------------------------------------------
+-- Functionality required by Alex 
+
+type AlexInput = (SrcLocation, String)
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar _ = error "alexInputPrevChar not used"
+
+alexGetChar :: AlexInput -> Maybe (Char, AlexInput)
+alexGetChar (loc, input) 
+   | null input  = Nothing
+   | otherwise = Just (nextChar, (nextLoc, rest))
+   where
+   nextChar = head input
+   rest = tail input 
+   nextLoc = moveChar nextChar loc
+
+moveChar :: Char -> SrcLocation -> SrcLocation 
+moveChar '\n' = incLine 1 
+moveChar '\t' = incTab 
+moveChar '\r' = id 
+moveChar _    = incColumn 1 
+
+lexicalError :: P a
+lexicalError = do
+  location <- getLocation
+  c <- liftM head getInput
+  failP location 
+        ["Lexical error !",
+         "The character " ++ show c ++ " does not fit here."]
+
+parseError :: P a
+parseError = do
+  token <- getLastToken
+  failP (location token)
+        ["Syntax error !",
+         "The symbol `" ++ show token ++ "' does not fit here."]
+
+lexToken :: P Token
+lexToken = do
+  location <- getLocation
+  input <- getInput
+  startCode <- getStartCode
+  case alexScan (location, input) startCode of
+    AlexEOF -> do
+       depth <- getIndentStackDepth
+       if depth <= 1 
+          then return endOfFileToken
+          else do 
+             popIndent
+             return dedentToken
+    AlexError _ -> lexicalError
+    AlexSkip (nextLocation, rest) len -> do
+       setLocation nextLocation 
+       setInput rest 
+       lexToken
+    AlexToken (nextLocation, rest) len action -> do
+       setLocation nextLocation 
+       setInput rest 
+       token <- action location len input 
+       setLastToken token
+       return token
+
+lexCont :: (Token -> P a) -> P a
+lexCont cont = do
+  tok <- lexToken
+  cont tok
+}
diff --git a/src/Language/Python/Version3/Parser/Parser.y b/src/Language/Python/Version3/Parser/Parser.y
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Parser/Parser.y
@@ -0,0 +1,1238 @@
+{
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.Parser 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Implementation of the Python version 3 parser. Generated by happy. 
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.Parser (parseFileInput, parseSingleInput, parseEval) where
+
+import Data.Char (isSpace, isAlpha, isDigit)
+import Language.Python.Version3.Parser.Lexer
+import Language.Python.Version3.Parser.Token hiding (True, False)
+import qualified Language.Python.Version3.Parser.Token as Token
+import Language.Python.Version3.Syntax.AST as AST
+import Language.Python.Version3.Parser.ParserUtils
+import Language.Python.Version3.Parser.ParserMonad
+import Language.Python.Data.SrcLocation
+import Data.List (foldl')
+import qualified Data.ByteString.Char8 as BS (ByteString)
+}
+
+%name parseFileInput FileInput 
+%name parseSingleInput SingleInput
+%name parseEval EvalInput  
+
+%tokentype { Token } 
+%error { parseError } 
+%monad { P } { thenP } { returnP }
+%lexer { lexCont } { Token.EOF }
+
+%token 
+   import          { Token.Import _ }
+   ident           { Token.Identifier _ $$ }
+   string          { Token.String _ $$ }
+   bytestring      { Token.ByteString _ $$ }
+   integer         { Token.Integer _ $$ }
+   float           { Token.Float _ $$ }
+   imaginary       { Token.Imaginary _ $$ }
+   '='             { Token.Assign _ }
+   '('             { Token.LeftRoundBracket _ }
+   ')'             { Token.RightRoundBracket _ }
+   '['             { Token.LeftSquareBracket _ }
+   ']'             { Token.RightSquareBracket _ }
+   '{'             { Token.LeftBrace _ }
+   '}'             { Token.RightBrace _ }
+   ','             { Token.Comma _ }
+   ';'             { Token.SemiColon _ }
+   ':'             { Token.Colon _ }
+   def             { Token.Def _ }
+   class           { Token.Class _ }
+   while           { Token.While _ }
+   for             { Token.For _ }
+   if              { Token.If _ }
+   with            { Token.With _ }
+   as              { Token.As _ }
+   true            { Token.True _ }
+   false           { Token.False _ }
+   none            { Token.None _ }
+   return          { Token.Return _ }
+   yield           { Token.Yield _ }
+   indent          { Token.Indent _ }
+   dedent          { Token.Dedent _ }
+   newline         { Token.Newline _ }
+   try             { Token.Try _ }
+   except          { Token.Except _ }
+   finally         { Token.Finally _ }
+   raise           { Token.Raise _ }
+   '+'             { Token.Plus _ }
+   '-'             { Token.Minus _ }
+   '*'             { Token.Mult _ }
+   '/'             { Token.Div _ }
+   '>'             { Token.GreaterThan _ }
+   '<'             { Token.LessThan _ }
+   '=='            { Token.Equality _ }
+   '>='            { Token.GreaterThanEquals _ }
+   '<='            { Token.LessThanEquals _ }
+   and             { Token.And _ }
+   or              { Token.Or _ }
+   '**'            { Token.Exponent _ }
+   pass            { Token.Pass _ }
+   break           { Token.Break _ }
+   continue        { Token.Continue _ }
+   del             { Token.Delete _ }
+   else            { Token.Else _ }
+   elif            { Token.Elif _ }
+   not             { Token.Not _ }
+   '|'             { Token.BinaryOr _ }
+   '^'             { Token.Xor _ }      
+   '&'             { Token.BinaryAnd _ }      
+   '>>'            { Token.ShiftLeft _ }
+   '<<'            { Token.ShiftRight _ }
+   '%'             { Token.Modulo _ }
+   floordiv        { Token.FloorDiv _ }
+   '~'             { Token.Tilde _ }
+   '!='            { Token.NotEquals _ }
+   in              { Token.In _ }
+   is              { Token.Is _ }
+   lambda          { Token.Lambda _ }
+   '.'             { Token.Dot _ }
+   '...'           { Token.Ellipsis _ }
+   '+='            { Token.PlusAssign _ }
+   '-='            { Token.MinusAssign _ }
+   '*='            { Token.MultAssign _ }
+   '/='            { Token.DivAssign _ }
+   '%='            { Token.ModAssign _ }
+   '**='           { Token.PowAssign _ }
+   '&='            { Token.BinAndAssign _ }
+   '|='            { Token.BinOrAssign _ }
+   '^='            { Token.BinXorAssign _ }
+   '<<='           { Token.LeftShiftAssign _ }
+   '>>='           { Token.RightShiftAssign _ }
+   '//='           { Token.FloorDivAssign _ } 
+   '@'             { Token.At _ }
+   '->'            { Token.RightArrow _ }
+   from            { Token.From _ }
+   global          { Token.Global _ }
+   nonlocal        { Token.NonLocal _ }
+   assert          { Token.Assert _ }
+   eof             { Token.EOF }
+
+%%
+
+{- 
+   Note: newline tokens in the grammar:
+   It seems there are some dubious uses of NEWLINE in the grammar. 
+   This is corroborated by this posting:
+   http://mail.python.org/pipermail/python-dev/2005-October/057014.html
+   The general idea is that the lexer does not generate NEWLINE tokens for
+   lines which contain only spaces or comments. However, the grammar sometimes
+   suggests that such tokens may exist. 
+-}
+
+
+-- single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE 
+
+{- 
+   Complete: but we don't support the newline at the end of a compound stmt 
+   because the lexer would not produce a newline there. It seems like a weirdness
+   in the way the interactive input works. 
+-}
+
+SingleInput :: { [Statement] }
+SingleInput 
+   : newline { [] }
+   | SimpleStmt { $1 } 
+   | CompoundStmt {- No newline here! -} { [$1] } 
+
+-- file_input: (NEWLINE | stmt)* ENDMARKER
+
+-- Complete: there is no need to mention the ENDMARKER, happy takes care of that.
+
+FileInput :: { Module }
+FileInput : ManyStmtOrNewline {- No ENDMARKER here! -} { Module $1 }
+
+ManyStmtOrNewline :: { [Statement] }
+ManyStmtOrNewline : ManyStmtOrNewlineRec { concat (reverse $1) }
+
+ManyStmtOrNewlineRec :: { [[Statement]] }
+ManyStmtOrNewlineRec 
+   : {- empty -} { [] } 
+   | ManyStmtOrNewlineRec NewLineOrStmt { $2 : $1 }
+
+NewLineOrStmt :: { [Statement] }
+NewLineOrStmt 
+   : newline { [] }
+   | Stmt    { $1 }
+
+-- eval_input: testlist NEWLINE* ENDMARKER
+
+-- Complete.
+
+EvalInput :: { Expr }
+EvalInput : TestList ZeroOrMoreNewline { $1 }
+
+ZeroOrMoreNewline :: { () }
+ZeroOrMoreNewline 
+   : {- empty -} { () }
+   | ZeroOrMoreNewline newline { () }
+ 
+{-
+  decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE
+  decorators: decorator+
+  decorated: decorators (classdef | funcdef)
+-}
+
+-- Complete
+
+Decorator :: { Decorator }
+Decorator 
+   : '@' DottedName OptionalArgList newline { Decorator { decorator_name = $2, decorator_args = $3 } }
+
+Decorators :: { [Decorator] }
+Decorators : DecoratorsRev { reverse $1 }
+
+DecoratorsRev :: { [Decorator] }
+DecoratorsRev 
+   : Decorator { [$1] }
+   | DecoratorsRev Decorator { $2 : $1 }
+
+Decorated :: { Statement }
+Decorated 
+   : Decorators ClassOrFunction { Decorated { decorated_decorators = $1, decorated_def = $2 } } 
+
+ClassOrFunction :: { Statement }
+ClassOrFunction 
+   : ClassDef { $1 }
+   | FuncDef { $1 }
+
+-- funcdef: 'def' NAME parameters ['->' test] ':' suite 
+
+-- Complete
+
+FuncDef :: { Statement }
+FuncDef 
+   : def Name Parameters OptionalResultAnnotation ':' Suite
+     { Fun { fun_name = $2 , fun_args = $3, fun_result_annotation = $4, fun_body = $6 } }
+
+OptionalResultAnnotation :: { Maybe Expr }
+OptionalResultAnnotation
+   : {- empty -} { Nothing }
+   | '->' Test { Just $2 }
+
+-- parameters: '(' [typedargslist] ')'
+
+Parameters :: { [Parameter] }
+Parameters : '(' TypedArgsList ')' { $2 }
+
+{- 
+   typedargslist: ((tfpdef ['=' test] ',')*
+       ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef)
+       | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) 
+-} 
+
+-- Complete. 
+
+{- Note the grammar allows an optional trailing comma, but only after the
+   positional arguments. If varargs are used (the star forms) then the
+   optional comma is not allowed. Why is this so? I don't know.
+
+   The code below uses right recursion extensively. The Happy docs say that
+   there can be problems with this:
+
+   http://www.haskell.org/happy/doc/html/sec-sequences.html#sec-separators
+
+   "right-recursive rules require stack space proportional to the length 
+   of the list being parsed. This can be extremely important where long sequences 
+   are involved, for instance in automatically generated output."
+
+   At the moment it seems easier to write using right recursion, but
+   we may want to re-visit the use of right recursion at some point.
+-} 
+
+TypedArgsList :: { [Parameter] }
+TypedArgsList : Params { $1 }
+
+Params :: { [Parameter] }
+Params
+   : {- empty -} { [] }
+   | Star { [$1] }
+   | StarStar { [$1] }
+   | Param { [$1] }
+   | Param ',' Params { $1 : $3 }
+   | Star ',' StarParams { $1 : $3 }
+
+StarParams :: { [Parameter] }
+StarParams 
+   : Param { [$1] }
+   | Param ',' StarParams { $1 : $3 }
+   | StarStar { [$1] }
+  
+-- tfpdef: NAME [':' test]
+-- Complete
+
+TfpDef :: { (Ident, Maybe Expr) }
+TfpDef : Name OptionalColonTest { ($1, $2) }
+
+OptionalColonTest :: { Maybe Expr }
+OptionalColonTest 
+   : {- empty -} { Nothing }
+   | ':' Test { Just $2 }
+
+OptionalDefault :: { Maybe Expr }
+OptionalDefault 
+   : {- empty -} { Nothing }
+   | '=' Test { Just $2 }
+
+Param :: { Parameter }
+Param 
+   : TfpDef OptionalDefault { makeParam $1 $2 }
+
+Star :: { Parameter }
+Star : '*' OptionalTfpDef { makeStarParam $2 }
+
+OptionalTfpDef :: { Maybe (Ident, Maybe Expr) }
+OptionalTfpDef 
+   : {- empty -} { Nothing }
+   | TfpDef { Just $1 }
+
+StarStar :: { Parameter }
+StarStar : '**' TfpDef { makeStarStarParam $2 }
+
+{- 
+   varargslist: ((vfpdef ['=' test] ',')* ('*' [vfpdef] (',' vfpdef ['=' test])*  [',' '**' vfpdef] | '**' vfpdef) | vfpdef ['=' test] (',' vfpdef ['=' test])* [','])  
+
+   vfpdef: NAME
+-}
+
+-- Complete
+
+{- 
+   There is some tedious similarity in these rules to the ones for
+   TypedArgsList. VarArgsList is used for lambda functions, and they
+   do not have parentheses around them (unlike function definitions).
+   Therefore lambda parameters cannot have the optional annotations
+   that normal functions can, because the annotations are introduced
+   using a colon. This would cause ambibguity with the colon
+   that marks the end of the lambda parameter list!
+
+   See the remarks about right recursion in the comments for
+   TypedArgsList.
+-}
+
+VarArgsList :: { [Parameter] }
+VarArgsList : VParams { $1 }
+
+VParams :: { [Parameter] }
+VParams
+   : {- empty -} { [] }
+   | VStar { [$1] }
+   | VStarStar { [$1] }
+   | VParam { [$1] }
+   | VParam ',' VParams { $1 : $3 }
+   | VStar ',' VStarParams { $1 : $3 }
+
+VStarParams :: { [Parameter] }
+VStarParams 
+   : VParam { [$1] }
+   | VParam ',' VStarParams { $1 : $3 }
+   | VStarStar { [$1] }
+
+VParam :: { Parameter }
+VParam : VfpDef OptionalDefault { makeParam ($1, Nothing) $2 }
+
+VStar :: { Parameter }
+VStar : '*' OptionalVfpDef { makeStarParam $2 }
+
+OptionalVfpDef :: { Maybe (Ident, Maybe Expr) }
+OptionalVfpDef 
+   : {- empty -} { Nothing }
+   | VfpDef { Just ($1, Nothing) }
+
+VStarStar :: { Parameter }
+VStarStar : '**' VfpDef { makeStarStarParam ($2, Nothing) }
+
+VfpDef :: { Ident }
+VfpDef : ident { Ident $1 }
+
+Name :: { Ident }
+Name : ident { Ident $1 }
+
+-- stmt: simple_stmt | compound_stmt 
+
+-- Complete
+
+Stmt :: { [Statement] }
+Stmt 
+   : SimpleStmt { $1 }
+   | CompoundStmt { [$1] } 
+
+-- simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE 
+
+-- Complete
+
+SimpleStmt :: { [Statement] }
+SimpleStmt : SmallStmts OptionalSemiColon newline { reverse $1 }
+
+OptionalSemiColon :: { () }
+OptionalSemiColon 
+   : {- empty -} { () }
+   | ';' { () }
+
+SmallStmts :: { [Statement] }
+SmallStmts : SmallStmt              { [$1] }
+           | SmallStmts ';' SmallStmt { $3 : $1 }
+
+{-
+small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt |
+             import_stmt | global_stmt | nonlocal_stmt | assert_stmt)
+-}
+
+-- Complete
+
+SmallStmt :: { Statement }
+SmallStmt 
+   : ExprStmt              { $1 }
+   | DelStmt               { $1 }
+   | PassStmt              { $1 }
+   | FlowStmt              { $1 }
+   | ImportStmt            { $1 }
+   | GlobalStmt            { $1 }
+   | NonLocalStmt          { $1 }
+   | AssertStmt            { $1 }
+
+-- expr_stmt: testlist (augassign (yield_expr|testlist) | ('=' (yield_expr|testlist))*)
+
+-- Complete
+
+ExprStmt :: { Statement }
+ExprStmt : TestList Assignment { makeAssignmentOrExpr $1 $2 }
+
+Assignment :: { Either [Expr] (AssignOp, Expr) }
+Assignment 
+   : NormalAssign { Left $1 }
+   | AugAssign { Right $1 }
+
+NormalAssign :: { [Expr] }
+NormalAssign : ZeroOrMoreAssignRev { reverse $1 }
+
+ZeroOrMoreAssignRev :: { [Expr] }
+ZeroOrMoreAssignRev 
+   : {- empty -} { [] }
+   | ZeroOrMoreAssignRev '=' YieldOrTestList { $3 : $1 }
+
+YieldOrTestList :: { Expr }
+YieldOrTestList 
+   : YieldExpr { $1 }
+   | TestList { $1 }
+
+{- 
+   augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |
+            '<<=' | '>>=' | '**=' | '//=') 
+-}
+
+-- Complete
+
+AugAssign :: { (AssignOp, Expr) }
+AugAssign : AugAssignOp YieldOrTestList { ($1, $2) }
+
+AugAssignOp :: { AssignOp }
+AugAssignOp 
+   : '+=' { AST.PlusAssign }
+   | '-=' { AST.MinusAssign } 
+   | '*=' { AST.MultAssign }
+   | '/=' { AST.DivAssign }
+   | '%=' { AST.ModAssign } 
+   | '**=' { AST.PowAssign }
+   | '&=' { AST.BinAndAssign } 
+   | '|=' { AST.BinOrAssign }
+   | '^=' { AST.BinXorAssign }
+   | '<<=' { AST.LeftShiftAssign }
+   | '>>=' { AST.RightShiftAssign }
+   | '//=' { AST.FloorDivAssign } 
+
+-- del_stmt: 'del' exprlist
+-- Complete
+
+DelStmt :: { Statement }
+DelStmt : del ExprList { AST.Delete { del_exprs = $2 } }
+
+-- pass_stmt: 'pass'
+-- Complete
+
+PassStmt :: { Statement }
+PassStmt : pass { AST.Pass }
+
+-- flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt
+-- Complete
+
+FlowStmt :: { Statement }
+FlowStmt 
+   : BreakStmt { $1 }
+   | ContinueStmt { $1 }
+   | ReturnStmt { $1 }
+   | RaiseStmt { $1 }
+   | YieldStmt { $1 }
+
+-- break_stmt: 'break'
+-- Complete
+
+BreakStmt :: { Statement }
+BreakStmt : break { AST.Break }  
+
+-- continue_stmt: 'continue'
+-- Complete
+
+ContinueStmt :: { Statement }
+ContinueStmt : continue { AST.Continue }  
+
+-- return_stmt: 'return' [testlist]
+-- Complete 
+
+ReturnStmt :: { Statement }
+ReturnStmt : return OptionalTestList { AST.Return { return_expr = $2 }}
+
+-- yield_stmt: yield_expr
+-- Complete
+
+YieldStmt :: { Statement }
+YieldStmt : YieldExpr { StmtExpr { stmt_expr = $1 } } 
+
+-- raise_stmt: 'raise' [test ['from' test]]
+-- Complete 
+
+RaiseStmt :: { Statement }
+RaiseStmt : raise OptionalTestFrom { AST.Raise { raise_expr = $2 }}
+
+OptionalTestFrom :: { Maybe (Expr, Maybe Expr) }
+OptionalTestFrom 
+   : {- empty -} { Nothing }
+   | Test OptionalFrom { Just ($1, $2) }
+
+OptionalFrom :: { Maybe Expr }
+OptionalFrom 
+   : {- empty -} { Nothing }
+   | from Test { Just $2 }
+
+-- import_stmt: import_name | import_from
+-- Complete
+
+ImportStmt :: { Statement }
+ImportStmt 
+   : ImportName { $1 }
+   | ImportFrom { $1 }
+
+{-
+   # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS
+   import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+)
+                 'import' ('*' | '(' import_as_names ')' | import_as_names))
+-}
+
+ImportFrom :: { Statement }
+ImportFrom : from ImportModule import StarOrAsNames { FromImport { from_module = $2, from_items = $4 }}
+
+StarOrAsNames :: { FromItems }
+StarOrAsNames
+   : '*' { ImportEverything }
+   | '(' ImportAsNames ')' { $2 }
+   | ImportAsNames { $1 } 
+
+ImportModule :: { ImportModule }
+ImportModule 
+   : '.' { ImportDot }
+   | '...' { ImportRelative (ImportRelative ImportDot) }
+   | DottedName { ImportName $1 }
+   | '.' ImportModule { ImportRelative $2 }
+   | '...' ImportModule { ImportRelative (ImportRelative (ImportRelative $2)) }
+
+-- import_as_name: NAME ['as' NAME]
+ImportAsName :: { FromItem }
+ImportAsName 
+   : Name OptionalAsName { FromItem { from_item_name = $1, from_as_name = $2 }}
+
+-- import_as_names: import_as_name (',' import_as_name)* [',']
+ImportAsNames :: { FromItems }
+ImportAsNames : ImportAsNamesRev OptionalComma { FromItems (reverse $1) }
+
+ImportAsNamesRev :: { [FromItem] }
+ImportAsNamesRev
+   : ImportAsName { [$1] }
+   | ImportAsNamesRev ',' ImportAsName { $3 : $1 }
+
+-- import_name: 'import' dotted_as_names
+
+ImportName :: { Statement }
+ImportName : import DottedAsNames { AST.Import { import_items = $2 }}
+
+-- dotted_as_names: dotted_as_name (',' dotted_as_name)*
+
+DottedAsNames :: { [ImportItem] }
+DottedAsNames : OneOrMoreDottedAsNamesRev { reverse $1 }
+
+OneOrMoreDottedAsNamesRev :: { [ImportItem] }
+OneOrMoreDottedAsNamesRev
+   : DottedAsName { [$1] }
+   | OneOrMoreDottedAsNamesRev ',' DottedAsName { $3 : $1 }
+
+-- dotted_as_name: dotted_name ['as' NAME]
+
+DottedAsName :: { ImportItem }
+DottedAsName 
+   : DottedName OptionalAsName  
+        { ImportItem { import_item_name = $1, import_as_name = $2 }}
+
+-- dotted_name: NAME ('.' NAME)* 
+-- Complete
+
+DottedName :: { DottedName }
+DottedName : Name DotNames { $1 : reverse $2 }
+
+DotNames :: { DottedName }
+DotNames 
+   : {- empty -} { [] }
+   | DotNames '.' Name { $3 : $1 }
+
+-- global_stmt: 'global' NAME (',' NAME)*
+-- Complete
+
+GlobalStmt :: { Statement }
+GlobalStmt : global OneOrMoreNames { AST.Global { global_vars = $2 }}
+
+OneOrMoreNames :: { [Ident] }
+OneOrMoreNames : OneOrMoreNamesRev { reverse $1 }
+
+OneOrMoreNamesRev :: { [Ident] }
+OneOrMoreNamesRev
+   : Name { [$1] }
+   | OneOrMoreNamesRev ',' Name { $3 : $1 }
+
+-- nonlocal_stmt: 'nonlocal' NAME (',' NAME)*
+
+NonLocalStmt :: { Statement }
+NonLocalStmt : nonlocal OneOrMoreNames { AST.NonLocal { nonLocal_vars = $2 }}
+
+-- assert_stmt: 'assert' test [',' test]
+
+AssertStmt :: { Statement }
+AssertStmt : assert TestListRev { AST.Assert { assert_exprs = reverse $2 }}
+
+-- compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated 
+-- Complete
+
+CompoundStmt :: { Statement }
+CompoundStmt 
+   : IfStmt { $1 } 
+   | WhileStmt { $1 }
+   | ForStmt { $1 }
+   | TryStmt { $1 }
+   | WithStmt { $1 }
+   | FuncDef { $1 } 
+   | ClassDef { $1 }
+   | Decorated { $1 }
+
+-- if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
+-- Complete
+
+IfStmt :: { Statement }
+IfStmt : IfConditionals OptionalElse { Conditional { cond_guards = $1, cond_else = $2 } }
+
+IfConditionals :: { [(Expr,[Statement])] }
+IfConditionals : If ZeroOrMoreElifs { $1 : $2 }
+
+If :: { (Expr, [Statement]) }
+If : if Test ':' Suite { ($2, $4) }
+
+ZeroOrMoreElifs :: { [(Expr, [Statement])]}
+ZeroOrMoreElifs : ZeroOrMoreElifsRev { reverse $1 }
+
+ZeroOrMoreElifsRev :: { [(Expr, [Statement])]}
+ZeroOrMoreElifsRev 
+   : {- empty -} { [] }
+   | ZeroOrMoreElifsRev elif Test ':' Suite { ($3, $5) : $1 }
+
+OptionalElse :: { [Statement] }
+OptionalElse 
+   : {- empty -} { [] }
+   | else ':' Suite { $3 }
+
+-- while_stmt: 'while' test ':' suite ['else' ':' suite] 
+-- Complete
+
+WhileStmt :: { Statement }
+WhileStmt : while Test ':' Suite OptionalElse { AST.While { while_cond = $2 , while_body = $4, while_else = $5 } }
+
+-- for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] 
+-- Complete
+
+ForStmt :: { Statement }
+ForStmt 
+   : for ExprList in TestList ':' Suite OptionalElse 
+     { AST.For { for_targets = $2, for_generator = $4, for_body = $6, for_else = $7 } }
+
+{- 
+   try_stmt: ('try' ':' suite 
+               ((except_clause ':' suite)+ ['else' ':' suite] ['finally' ':' suite] | 'finally' ':' suite))
+-}
+-- Complete
+
+TryStmt :: { Statement }
+TryStmt : try ':' Suite Handlers { makeTry $3 $4 }
+
+Handlers :: { ([Handler], [Statement], [Statement]) }
+Handlers 
+   : OneOrMoreExceptClauses OptionalElse OptionalFinally { ($1, $2, $3) }
+   | finally ':' Suite { ([], [], $3) }
+
+OptionalFinally :: { [Statement] }
+OptionalFinally 
+   : {- empty -} { [] }
+   | finally ':' Suite { $3 }
+
+OneOrMoreExceptClauses :: { [Handler] }
+OneOrMoreExceptClauses : OneOrMoreExceptClausesRev { reverse $1 }
+
+OneOrMoreExceptClausesRev :: { [Handler] }
+OneOrMoreExceptClausesRev 
+   : Handler { [$1] }
+   | OneOrMoreExceptClausesRev Handler { $2 : $1 }
+
+Handler :: { Handler }
+Handler : ExceptClause ':' Suite { ($1, $3) }
+
+{- 
+   with_stmt: 'with' test [ with_var ] ':' suite
+   with_var: 'as' expr
+-}
+-- Complete
+
+WithStmt :: { Statement }
+WithStmt : with Test OptionalAs ':' Suite 
+           { AST.With { with_context = $2, with_as = $3, with_body = $5 } }
+
+OptionalAs :: { Maybe Expr }
+OptionalAs 
+   : {- empty -} { Nothing }
+   | as Expr { Just $2 }
+
+-- except_clause: 'except' [test ['as' NAME]] 
+-- Complete
+
+ExceptClause :: { ExceptClause }
+ExceptClause : except ExceptExpr { $2 }
+
+ExceptExpr :: { ExceptClause }
+ExceptExpr 
+   : {- empty -} { Nothing }
+   | Test OptionalAsName { Just ($1, $2) }
+
+OptionalAsName :: { Maybe Ident }
+OptionalAsName 
+   : {- empty -} { Nothing }
+   | as Name     { Just $2 }
+
+-- suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT 
+-- Complete, but we don't have a newline before indent b/c it is redundant
+
+Suite :: { [Statement] }
+Suite 
+   : SimpleStmt { $1 }
+   | {- no newline here! -} indent OneOrMoreStmts dedent { $2 } 
+
+OneOrMoreStmts :: { [Statement] }
+OneOrMoreStmts : OneOrMoreStmtsRec { reverse (concat $1) }
+
+OneOrMoreStmtsRec :: { [[Statement]] }
+OneOrMoreStmtsRec 
+   : Stmt { [$1] }
+   | OneOrMoreStmtsRec Stmt { $2 : $1 }
+
+-- test: or_test ['if' or_test 'else' test] | lambdef
+-- Complete
+
+Test :: { Expr }
+Test 
+   : OrTest TestCond { makeConditionalExpr $1 $2 }
+   | LambDef { $1 }
+
+TestCond :: { Maybe (Expr, Expr) }
+TestCond 
+   : {- empty -} { Nothing }
+   | if OrTest else Test { Just ($2, $4) }
+
+-- test_nocond: or_test | lambdef_nocond
+-- Complete 
+
+TestNoCond :: { Expr }
+TestNoCond
+   : OrTest { $1 }
+   | LambDefNoCond { $1 }
+
+-- lambdef: 'lambda' [varargslist] ':' test
+-- Complete
+
+LambDef :: { Expr }
+LambDef : lambda VarArgsList ':' Test { AST.Lambda $2 $4 }
+
+-- lambdef_nocond: 'lambda' [varargslist] ':' test_nocond
+-- Complete
+
+LambDefNoCond :: { Expr }
+LambDefNoCond : lambda VarArgsList ':' TestNoCond { AST.Lambda $2 $4 }
+
+-- or_test: and_test ('or' and_test)* 
+-- Complete
+
+OrTest :: { Expr }
+OrTest : AndTest OrSequence { makeBinOp $1 $2 }
+
+OrSequence :: { [(Op, Expr)] }
+OrSequence 
+   : {- empty -} { [] }
+   | OrSequence or AndTest { (AST.Or, $3) : $1 }
+
+-- and_test: not_test ('and' not_test)* 
+-- Complete 
+
+AndTest :: { Expr }
+AndTest : NotTest AndSequence { makeBinOp $1 $2 }
+
+AndSequence :: { [(Op, Expr)] }
+AndSequence 
+   : {- empty -} { [] }
+   | AndSequence and NotTest { (AST.And, $3) : $1 }
+
+-- not_test: 'not' not_test | comparison 
+-- Complete
+
+NotTest :: { Expr }
+NotTest 
+   : not NotTest { UnaryOp {operator = AST.Not, op_arg = $2} }
+   | Comparison { $1 }
+
+-- comparison: star_expr (comp_op star_expr)*
+-- Complete
+
+Comparison :: { Expr }
+Comparison : StarExpr CompSequence { makeBinOp $1 $2 }
+
+CompSequence :: { [(Op, Expr)] }
+CompSequence 
+   : {- empty -} { [] }
+   | CompSequence CompOp StarExpr { ($2, $3) : $1 }
+
+-- comp_op: '<'|'>'|'=='|'>='|'<='|'!='|'in'|'not' 'in'|'is'|'is' 'not' 
+-- Complete
+
+CompOp :: { Op }
+CompOp 
+   : '<'    { AST.LessThan }
+   | '>'    { AST.GreaterThan }
+   | '=='   { AST.Equality }
+   | '>='   { AST.GreaterThanEquals }
+   | '<='   { AST.LessThanEquals }
+   | '!='   { AST.NotEquals }
+   | in     { AST.In }
+   | not in { AST.NotIn }
+   | IsOp   { $1 }
+
+IsOp :: { Op }
+IsOp : is NotPart { $2 }
+
+NotPart :: { Op }
+NotPart 
+   : {- empty -} { AST.Is }
+   | not { AST.IsNot } 
+
+-- star_expr: ['*'] expr 
+-- Incomplete
+{- 
+   XXX The grammar grossly over-states the places where a starred expression can occur.
+   It leads to an ambiguity because of the starred argument lists. 
+
+   I think this is a bug in the grammar, and it will need more investigation to see if
+   it can be fixed.
+-}
+
+StarExpr :: { Expr }
+StarExpr : Expr { $1 }
+{-
+   : '*' Expr { Starred { starred_expr = $2 }} 
+   | Expr { $1 }
+-}
+
+-- expr: xor_expr ('|' xor_expr)* 
+-- Complete
+
+Expr :: { Expr }
+Expr : XorExpr BinaryOrSequence { makeBinOp $1 $2 }
+
+BinaryOrSequence :: { [(Op, Expr)] }
+BinaryOrSequence 
+   : {- empty -} { [] }
+   | BinaryOrSequence '|' XorExpr { (AST.BinaryOr, $3) : $1 }
+
+-- xor_expr: and_expr ('^' and_expr)* 
+-- Complete
+
+XorExpr :: { Expr }
+XorExpr : AndExpr XorSequence { makeBinOp $1 $2 }
+
+XorSequence :: { [(Op, Expr)] }
+XorSequence 
+   : {- empty -} { [] }
+   | XorSequence '^' AndExpr { (AST.Xor, $3) : $1 }
+
+-- and_expr: shift_expr ('&' shift_expr)* 
+-- Complete
+
+AndExpr :: { Expr }
+AndExpr : ShiftExpr BinaryAndSequence { makeBinOp $1 $2 }
+
+BinaryAndSequence :: { [(Op, Expr)] }
+BinaryAndSequence 
+   : {- empty -} { [] }
+   | BinaryAndSequence '&' ShiftExpr { (AST.BinaryAnd, $3) : $1 }
+
+-- shift_expr: arith_expr (('<<'|'>>') arith_expr)* 
+-- Complete
+
+ShiftExpr :: { Expr }
+ShiftExpr : ArithExpr ShiftSequence { makeBinOp $1 $2 }
+
+ShiftSequence :: { [(Op, Expr)] }
+ShiftSequence 
+   : {- empty -} { [] }
+   | ShiftSequence ShiftOp ArithExpr { ($2, $3) : $1 }
+
+ShiftOp :: { Op }
+ShiftOp 
+   : '<<' { AST.ShiftLeft }
+   | '>>' { AST.ShiftRight }
+
+-- arith_expr: term (('+'|'-') term)*
+-- Complete
+
+ArithExpr :: { Expr }
+ArithExpr : Term TermSequence { makeBinOp $1 $2 }
+
+TermSequence :: { [(Op, Expr)] }
+TermSequence 
+   : {- empty -} { [] }
+   | TermSequence ArithOp Term { ($2, $3) : $1 }
+
+ArithOp :: { Op }
+ArithOp 
+   : '+' { AST.Plus }
+   | '-' { AST.Minus }
+
+-- term: factor (('*'|'/'|'%'|'//') factor)* 
+-- Complete
+
+Term :: { Expr }
+Term : Factor FactorSequence { makeBinOp $1 $2 }
+
+FactorSequence :: { [(Op, Expr)] }
+FactorSequence 
+   : {- empty -} { [] }
+   | FactorSequence MultDivOp Factor { ($2, $3) : $1 }
+
+MultDivOp :: { Op }
+MultDivOP 
+   : '*' { AST.Multiply } 
+   | '/' { AST.Divide }
+   | '%' { AST.Modulo }
+   | floordiv { AST.FloorDivide }
+
+-- factor: ('+'|'-'|'~') factor | power 
+-- Complete
+
+Factor :: { Expr }
+Factor 
+   : '+' Factor { UnaryOp { operator = AST.Plus, op_arg = $2 } } 
+   | '-' Factor { UnaryOp { operator = AST.Minus, op_arg = $2 } } 
+   | '~' Factor { UnaryOp { operator = AST.Invert, op_arg = $2 } } 
+   | Power { $1 }
+
+-- power: atom trailer* ['**' factor]
+-- Complete, but maybe we should factor out the common prefix?
+
+Power :: { Expr }
+Power : Atom ZeroOrMoreTrailer { addTrailer $1 $2 }
+      | Atom ZeroOrMoreTrailer '**' Factor 
+        { makeBinOp (addTrailer $1 $2) [(AST.Exponent, $4)] } 
+
+ZeroOrMoreTrailer :: { [Trailer] }
+ZeroOrMoreTrailer : ZeroOrMoreTrailerRev { reverse $1 }
+
+ZeroOrMoreTrailerRev :: { [Trailer] }
+ZeroOrMoreTrailerRev 
+   : {- empty -} { [] }
+   | ZeroOrMoreTrailerRev Trailer { $2 : $1 }
+
+{- 
+   atom: ('(' [yield_expr|testlist_comp] ')' |
+          '[' [testlist_comp] ']' |
+          '{' [dictorsetmaker] '}' |
+           NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')
+-}
+-- Incomplete
+
+Atom :: { Expr }
+Atom : ParenForm { $1 } 
+     | ListForm { $1 }
+     | DictOrSetForm { $1 }
+     | Name { AST.Var $1 }
+     | integer { AST.Int $1 }
+     | float { AST.Float $1 }
+     | imaginary { AST.Imaginary { imaginary_value = $1 }}
+     | OneOrMoreStrings { AST.Strings (reverse $1) }
+     | OneOrMoreByteStrings { AST.ByteStrings (reverse $1) }
+     | '...' { AST.Ellipsis }
+     | none { AST.None }
+     | true { AST.Bool Prelude.True }
+     | false { AST.Bool Prelude.False }
+
+ParenForm :: { Expr }
+ParenForm : '(' YieldOrTestListComp ')' { $2 }
+
+ListForm :: { Expr }
+ListForm 
+   : '[' ']' { List { list_exprs = [] } }
+   | '[' TestListComp ']' { makeListForm $2 }
+
+DictOrSetForm :: { Expr }
+DictOrSetForm
+   : '{' '}' { Dictionary { dict_mappings = [] }}
+   | '{' DictOrSetMaker '}' { $2 }
+
+YieldOrTestListComp :: { Expr }
+YieldOrTestListComp 
+   : {- empty -} { Tuple { tuple_exprs = [] } }
+   | YieldExpr { $1 }
+   | TestListComp { either id (\c -> Generator { gen_comprehension = c }) $1 } 
+
+OneOrMoreStrings :: { [String] }
+OneOrMoreStrings
+   : string { [$1] }
+   | OneOrMoreStrings string { $2 : $1 }
+
+OneOrMoreByteStrings :: { [BS.ByteString] }
+OneOrMoreByteStrings
+   : bytestring { [$1] }
+   | OneOrMoreByteStrings bytestring { $2 : $1 }
+
+-- testlist_comp: test ( comp_for | (',' test)* [','] )
+-- Complete 
+
+TestListComp :: { Either Expr (Comprehension Expr) }
+TestListComp
+   : TestList { Left $1 }
+   | Test CompFor { Right (makeComprehension $1 $2) }
+
+-- trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME 
+-- Complete 
+
+Trailer :: { Trailer }
+Trailer 
+   : '(' ArgList ')' { TrailerCall $2 }
+   | '[' SubscriptList ']' { TrailerSubscript $2 } 
+   | '.' Name { TrailerDot $2 }
+
+-- subscriptlist: subscript (',' subscript)* [',']
+
+SubscriptList :: { [Subscript] }
+SubscriptList : OneOrMoreSubsRev OptionalComma { reverse $1 }
+
+OneOrMoreSubsRev :: { [Subscript] }
+OneOrMoreSubsRev
+   : Subscript { [$1] }
+   | OneOrMoreSubsRev ',' Subscript { $3 : $1 }
+
+-- subscript: test | [test] ':' [test] [sliceop]
+
+Subscript :: { Subscript }
+Subscript
+   : Test { SubscriptExpr $1 }
+   | OptionalTest ':' OptionalTest OptionalSliceOp { SubscriptSlice $1 $3 $4 }
+
+OptionalTest :: { Maybe Expr }
+OptionalTest
+   : {- empty -} { Nothing }
+   | Test { Just $1 }
+
+OptionalSliceOp :: { Maybe (Maybe Expr) }
+OptionalSliceOp 
+   : {- empty -} { Nothing }
+   | SliceOp { Just $1 }
+
+-- sliceop: ':' [test]
+
+SliceOp :: { Maybe Expr }
+SliceOp : ':' OptionalTest { $2 }
+
+-- exprlist: star_expr (',' star_expr)* [',']
+-- Complete
+
+ExprList :: { [Expr] }
+ExprList : ExprListRev OptionalComma { reverse $1 }
+       
+OptionalComma :: { Bool }
+OptionalComma 
+   : {- empty -} { False }
+   | ',' { True }  
+
+ExprListRev :: { [Expr] }
+ExprListRev 
+   : StarExpr { [$1] }
+   | ExprListRev ',' StarExpr { $3 : $1 }
+
+-- testlist: test (',' test)* [',']
+-- Complete
+
+-- Some trickery here because the of the optional trailing comma, which
+-- could turn a normal expression into a tuple.
+-- Very occasionally, TestList is used to generate something which is not
+-- a tuple (such as the square bracket notation in list literals). Therefore
+-- it would seem like a good idea to not return a tuple in this case, but
+-- a list of expressions. However this would complicate a lot of code
+-- since we would have to carry around the optional comma information.
+-- I've decided to leave it as a tuple, and in special cases, unpack the
+-- tuple and pull out the list of expressions.
+
+TestList :: { Expr }
+TestList : TestListRev OptionalComma { makeTupleOrExpr (reverse $1) $2 }
+       
+TestListRev :: { [Expr] }
+TestListRev 
+   : Test { [$1] }
+   | TestListRev ',' Test { $3 : $1 }
+
+{- 
+   dictorsetmaker: ( (test ':' test (comp_for | (',' test ':' test)* [','])) |
+                   (test (comp_for | (',' test)* [','])) )
+-}
+
+DictOrSetMaker :: { Expr }
+DictOrSetMaker
+   : Test ':' Test DictRest { makeDictionary ($1, $3) $4 } 
+   | Test SetRest { makeSet $1 $2 } 
+
+DictRest :: { Either CompFor [(Expr, Expr)] }
+DictRest
+   : CompFor { Left $1 }
+   | ZeroOrMoreDictMappings OptionalComma { Right (reverse $1) }
+
+ZeroOrMoreDictMappings :: { [(Expr, Expr)] }
+ZeroOrMoreDictMappings
+   : {- empty -} { [] }
+   | ZeroOrMoreDictMappings ',' Test ':' Test { ($3,$5) : $1 }
+
+SetRest :: { Either CompFor [Expr] }
+SetRest
+   : CompFor { Left $1 }
+   | ZeroOrMoreCommaTest OptionalComma { Right (reverse $1) }
+
+ZeroOrMoreCommaTest :: { [Expr] }
+ZeroOrMoreCommaTest 
+   : {- empty -} { [] }
+   | ZeroOrMoreCommaTest ',' Test { $3 : $1 }
+
+-- classdef: 'class' NAME ['(' [arglist] ')'] ':' suite
+-- Complete
+
+ClassDef :: { Statement }
+ClassDef 
+   : class Name OptionalArgList ':' Suite 
+     { AST.Class { class_name = $2, class_args = $3, class_body = $5 }}
+
+OptionalArgList :: { [Argument] }
+OptionalArgList 
+   : {- empty -} { [] }
+   | '(' ArgList ')' { $2 }
+
+{- 
+   arglist: (argument ',')* (argument [',']
+                         |'*' test (',' argument)* [',' '**' test]
+                         |'**' test)
+-}
+
+{-
+   Deviates slightly from the grammar because we allow empty arg lists.
+   The grammar allows for this by making arg lists non-empty but optional.
+   Works out the same in the end.
+-}
+
+ArgList :: { [Argument] }
+ArgList 
+   : {- empty -} { [] }
+   | '*' Test { [ArgVarArgsPos { arg_expr = $2 }] }
+   | '**' Test { [ArgVarArgsKeyword { arg_expr = $2 }] }
+   | Argument { [$1] }
+   | Argument ',' ArgList { $1 : $3 }
+   | '*' Test ',' StarArgs { ArgVarArgsPos { arg_expr = $2 } : $4 }
+
+StarArgs :: { [Argument] }
+StarArgs
+   : Argument { [$1] }
+   | Argument ',' StarArgs { $1 : $3 }
+   | '**' Test { [ArgVarArgsKeyword { arg_expr = $2 }] }
+
+-- argument: test [comp_for] | test '=' test  # Really [keyword '='] test
+
+Argument :: { Argument }
+Argument
+   : Name '=' Test { ArgKeyword { arg_keyword = $1, arg_expr = $3 }}
+   | Test { ArgExpr { arg_expr = $1 }} 
+   | Test CompFor { ArgExpr { arg_expr = Generator { gen_comprehension = makeComprehension $1 $2 }}}
+
+-- comp_iter: comp_for | comp_if
+-- Complete
+
+CompIter :: { CompIter }
+CompIter
+   : CompFor { IterFor $1 }
+   | CompIf { IterIf $1 } 
+
+-- comp_for: 'for' exprlist 'in' or_test [comp_iter]
+
+CompFor :: { CompFor }
+CompFor : for ExprList in OrTest OptionalCompIter 
+          { CompFor { comp_for_exprs = $2, comp_in_expr = $4, comp_for_iter = $5 }}
+
+OptionalCompIter :: { Maybe CompIter }
+OptionalCompIter
+   : {- empty -} { Nothing }
+   | CompIter { Just $1 }
+
+-- comp_if: 'if' test_nocond [comp_iter]
+
+CompIf :: { CompIf }
+CompIf : if TestNoCond OptionalCompIter { CompIf { comp_if = $2, comp_if_iter = $3 } }
+
+-- testlist1: test (',' test)*
+-- Not used in the rest of the grammar!
+
+-- encoding_decl: NAME
+-- Not used in the rest of the grammqr!
+
+-- yield_expr: 'yield' [testlist] 
+-- Complete
+
+YieldExpr :: { Expr }
+YieldExpr : yield OptionalTestList { AST.Yield { yield_expr = $2 } }
+
+OptionalTestList :: { Maybe Expr }
+OptionalTestList 
+   : {- empty -} { Nothing }
+   | TestList    { Just $1 }
+
+{
+-- Put additional Haskell code in here if needed.
+
+}
diff --git a/src/Language/Python/Version3/Parser/ParserMonad.hs b/src/Language/Python/Version3/Parser/ParserMonad.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Parser/ParserMonad.hs
@@ -0,0 +1,211 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.ParserMonad 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Monad support for Python parser and lexer. 
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.ParserMonad 
+   ( P
+   , execParser
+   , runParser
+   , failP
+   , thenP
+   , returnP
+   , setLocation
+   , getLocation
+   , getInput
+   , setInput
+   , getLastToken
+   , setLastToken
+   , ParseError (ParseError)
+   , State (..)
+   , initialState
+   , pushStartCode
+   , popStartCode
+   , getStartCode
+   , getIndent
+   , pushIndent
+   , popIndent
+   , getIndentStackDepth
+   , getParen
+   , pushParen
+   , popParen
+   , getParenStackDepth
+   ) where
+
+import Language.Python.Data.SrcLocation (SrcLocation (..))
+import Language.Python.Version3.Parser.Token (Token (..))
+
+-- | Parse error. A list of error messages and a source location.
+newtype ParseError = ParseError ([String], SrcLocation) 
+   deriving Show
+
+data ParseResult a
+   = POk !State a
+   | PFailed [String] SrcLocation   -- The error message and position
+
+data State = 
+   State 
+   { location :: !SrcLocation -- position at current input location
+   , input :: !String         -- the current input
+   , previousToken :: Token   -- the previous token
+   , startCodeStack :: [Int]  -- a stack of start codes for the state of the lexer
+   , indentStack :: [Int]     -- a stack of source column positions of indentation levels
+   , parenStack :: [Token]   -- a stack of parens and brackets for indentation handling
+   }
+
+initialState :: SrcLocation -> String -> [Int] -> State
+initialState initLoc inp scStack
+   = State
+   { location = initLoc 
+   , input = inp
+   , previousToken = initToken
+   , startCodeStack = scStack
+   , indentStack = [1]
+   , parenStack = []
+   }
+
+newtype P a = P { unP :: State -> ParseResult a }
+
+instance Monad P where
+   return = returnP
+   (>>=) = thenP
+   fail m = getLocation >>= \loc -> failP loc [m]
+
+execParser :: P a -> State -> Either ParseError a
+execParser (P parser) initialState =
+   case parser initialState of
+      PFailed message errloc -> Left (ParseError (message, errloc))
+      POk st result -> Right result
+
+runParser :: P a -> State -> Either ParseError (State, a)
+runParser (P parser) initialState =
+   case parser initialState of
+      PFailed message errloc -> Left (ParseError (message, errloc))
+      POk st result -> Right (st, result)
+
+initToken :: Token
+initToken = Newline NoLocation
+
+{-# INLINE returnP #-}
+returnP :: a -> P a
+returnP a = P $ \s -> POk s a
+
+{-# INLINE thenP #-}
+thenP :: P a -> (a -> P b) -> P b
+(P m) `thenP` k = P $ \s ->
+        case m s of
+                POk s' a        -> (unP (k a)) s'
+                PFailed err loc -> PFailed err loc 
+
+failP :: SrcLocation -> [String] -> P a
+failP loc msg = P $ \_ -> PFailed msg loc 
+
+setLocation :: SrcLocation -> P ()
+setLocation loc = P $ \s -> POk (s { location = loc }) ()
+
+getLocation :: P SrcLocation
+getLocation = P $ \s@State{ location = loc } -> POk s loc 
+
+getInput :: P String 
+getInput = P $ \s@State{ input = inp } -> POk s inp
+
+setInput :: String -> P ()
+setInput inp = P $ \s -> POk (s { input = inp }) ()
+
+getLastToken :: P Token
+getLastToken = P $ \s@State{ previousToken = tok } -> POk s tok
+
+setLastToken :: Token -> P ()
+setLastToken tok = P $ \s -> POk (s { previousToken = tok }) ()
+
+pushStartCode :: Int -> P () 
+pushStartCode code = P newStack
+   where 
+   newStack s@State{ startCodeStack = scStack } 
+      = POk (s { startCodeStack = code : scStack}) () 
+
+popStartCode :: P ()
+popStartCode = P newStack
+   where 
+   newStack s@State{ startCodeStack = scStack, location = loc } 
+      = case scStack of
+           [] ->  PFailed err loc
+           _:rest -> POk (s { startCodeStack = rest }) () 
+   err = ["fatal error in lexer: attempt to pop empty start code stack"]
+
+getStartCode :: P Int
+getStartCode = P getCode
+   where
+   getCode s@State{ startCodeStack = scStack, location = loc }
+      = case scStack of
+           [] ->  PFailed err loc
+           code:_ -> POk s code
+   err = ["fatal error in lexer: start code stack empty on getStartCode"]
+
+pushIndent :: Int -> P () 
+pushIndent indent = P newStack
+   where 
+   newStack s@State{ indentStack = iStack } 
+      = POk (s { indentStack = indent : iStack }) () 
+
+popIndent :: P ()
+popIndent = P newStack
+   where 
+   newStack s@State{ indentStack = iStack, location = loc } 
+      = case iStack of
+           [] -> PFailed err loc
+           _:rest -> POk (s { indentStack = rest }) () 
+   -- XXX this message needs fixing
+   err = ["fatal error in lexer: attempt to pop empty indentation stack"]
+
+getIndent :: P Int
+getIndent = P get
+   where
+   get s@State{ indentStack = iStack, location = loc }
+      = case iStack of
+           [] -> PFailed err loc
+           indent:_ -> POk s indent 
+   -- XXX this message needs fixing
+   err = ["fatal error in lexer: indent stack empty on getIndent"]
+
+getIndentStackDepth :: P Int
+getIndentStackDepth = P get
+   where
+   get s@State{ indentStack = iStack } = POk s (length iStack)
+
+pushParen :: Token -> P () 
+pushParen symbol = P newStack
+   where 
+   newStack s@State{ parenStack = pStack } 
+      = POk (s { parenStack = symbol : pStack }) () 
+
+popParen :: P ()
+popParen = P newStack
+   where 
+   newStack s@State{ parenStack = pStack, location = loc } 
+      = case pStack of
+           [] -> PFailed err loc
+           _:rest -> POk (s { parenStack = rest }) () 
+   -- XXX this message needs fixing
+   err = ["fatal error in lexer: attempt to pop empty paren stack"]
+
+getParen :: P (Maybe Token)
+getParen = P get
+   where
+   get s@State{ parenStack = pStack }
+      = case pStack of
+           [] -> POk s Nothing 
+           symbol:_ -> POk s (Just symbol) 
+
+getParenStackDepth :: P Int
+getParenStackDepth = P get
+   where
+   get s@State{ parenStack = pStack } = POk s (length pStack)
diff --git a/src/Language/Python/Version3/Parser/ParserUtils.hs b/src/Language/Python/Version3/Parser/ParserUtils.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Parser/ParserUtils.hs
@@ -0,0 +1,136 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.ParserUtils 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Various utilities to support the Python parser. 
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.ParserUtils where
+
+import Language.Python.Version3.Syntax.AST as AST
+import Language.Python.Version3.Parser.Token hiding (True, False)
+import Language.Python.Version3.Parser.ParserMonad hiding (location)
+import Language.Python.Data.SrcLocation 
+import Data.List (foldl')
+
+makeConditionalExpr :: Expr -> Maybe (Expr, Expr) -> Expr
+makeConditionalExpr e Nothing = e
+makeConditionalExpr e (Just (cond, false_branch))
+    = CondExpr
+      { ce_true_branch = e
+      , ce_condition = cond
+      , ce_false_branch = false_branch
+      }
+
+makeBinOp :: Expr -> [(Op, Expr)] -> Expr
+makeBinOp e es
+   = foldl' (\e1 (op, e2) -> BinaryOp { operator = op, left_op_arg = e1, right_op_arg = e2 } )
+     e (reverse es)
+
+parseError :: Token -> P a 
+parseError token 
+   = failP (location token) ["Unexpected token", show token] 
+
+data Trailer
+   = TrailerCall [Argument]
+   | TrailerSubscript [Subscript] 
+   | TrailerDot Ident
+
+data Subscript
+   = SubscriptExpr Expr
+   | SubscriptSlice (Maybe Expr) (Maybe Expr) (Maybe (Maybe Expr)) 
+
+isProperSlice :: Subscript -> Bool
+isProperSlice (SubscriptSlice {}) = True
+isProperSlice other = False
+
+subscriptToSlice :: Subscript -> Slice
+subscriptToSlice (SubscriptSlice lower upper stride)
+   = SliceProper { slice_lower = lower, slice_upper = upper, slice_stride = stride }
+subscriptToSlice (SubscriptExpr e)
+   = SliceExpr { slice_expr = e }
+
+subscriptToExpr :: Subscript -> Expr
+subscriptToExpr (SubscriptExpr e) = e
+-- this should never happen:
+subscriptToExpr (SubscriptSlice {}) 
+   = error "subscriptToExpr applied to a proper slice"
+
+addTrailer :: Expr -> [Trailer] -> Expr
+addTrailer
+   = foldl' trail
+   where
+   trail :: Expr -> Trailer -> Expr
+   trail e (TrailerCall args) = Call { call_fun = e, call_args = args }
+   trail e (TrailerSubscript subs) 
+      | any isProperSlice subs
+           = SlicedExpr { slicee = e, slices = map subscriptToSlice subs }
+      | otherwise 
+           = Subscript { subscriptee = e, subscript_exprs = map subscriptToExpr subs }
+   trail e (TrailerDot ident)
+      = BinaryOp { operator = AST.Dot, left_op_arg = e, right_op_arg = Var ident }
+
+makeTupleOrExpr :: [Expr] -> Bool -> Expr
+makeTupleOrExpr [e] False = e
+makeTupleOrExpr es@[e] True = Tuple { tuple_exprs = es }
+makeTupleOrExpr es@(_:_) _ = Tuple { tuple_exprs = es } 
+
+makeAssignmentOrExpr :: Expr -> Either [Expr] (AssignOp, Expr) -> Statement
+makeAssignmentOrExpr e (Left es) 
+   = makeNormalAssignment e es
+   where
+   makeNormalAssignment :: Expr -> [Expr] -> Statement
+   makeNormalAssignment e [] = StmtExpr { stmt_expr = e } 
+   makeNormalAssignment e es 
+      = AST.Assign { assign_to = e : front, assign_expr = head back }
+      where
+      (front, back) = splitAt (len - 1) es
+      len = length es 
+makeAssignmentOrExpr e1 (Right (op, e2)) 
+   = makeAugAssignment e1 op e2
+   where
+   makeAugAssignment :: Expr -> AssignOp -> Expr -> Statement
+   makeAugAssignment e1 op e2
+      = AST.AugmentedAssign { aug_assign_to = e1, aug_assign_op = op, aug_assign_expr = e2 } 
+
+makeTry :: Suite -> ([Handler], [Statement], [Statement]) -> Statement
+makeTry body (handlers, elses, finally)
+   = AST.Try { try_body = body, try_excepts = handlers, try_else = elses, try_finally = finally }
+
+makeParam :: (Ident, Maybe Expr) -> Maybe Expr -> Parameter
+makeParam (name, annot) defaultVal
+   = Param { param_name = name, param_annotation = annot, param_default = defaultVal }
+
+makeStarParam :: Maybe (Ident, Maybe Expr) -> Parameter
+makeStarParam Nothing = EndPositional
+makeStarParam (Just (name, annot))
+   = VarArgsPos { param_name = name, param_annotation = annot }
+
+makeStarStarParam :: (Ident, Maybe Expr) -> Parameter
+makeStarStarParam (name, annot)
+   = VarArgsKeyword { param_name = name, param_annotation = annot }
+
+makeComprehension :: Expr -> CompFor -> Comprehension Expr
+makeComprehension e for
+   = Comprehension { comprehension_expr = e, comprehension_for = for }
+
+makeListForm :: Either Expr (Comprehension Expr) -> Expr
+makeListForm (Left tuple@(Tuple {})) = List { list_exprs = tuple_exprs tuple }
+makeListForm (Left other) = List { list_exprs = [other] }
+makeListForm (Right comprehension) = ListComp { list_comprehension = comprehension }
+
+makeSet :: Expr -> Either CompFor [Expr] -> Expr
+makeSet e (Left compFor)
+   = SetComp { set_comprehension = Comprehension { comprehension_expr = e, comprehension_for = compFor }}
+makeSet e (Right es) = Set { set_exprs = e:es }
+
+makeDictionary :: (Expr, Expr) -> Either CompFor [(Expr,Expr)] -> Expr
+makeDictionary e (Left compFor)
+   = DictComp { dict_comprehension = Comprehension { comprehension_expr = e, comprehension_for = compFor }}
+makeDictionary e (Right es) = Dictionary { dict_mappings = e:es }
diff --git a/src/Language/Python/Version3/Parser/Token.hs b/src/Language/Python/Version3/Parser/Token.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Parser/Token.hs
@@ -0,0 +1,136 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Parser.Token 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Lexical tokens for the Python version 3 lexer. 
+-- See: <http://docs.python.org/dev/3.0/reference/lexical_analysis.html>
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Parser.Token 
+   ( Token (..)
+   , Ident (..)
+   )
+where
+
+import Language.Python.Data.SrcLocation (SrcLocation (..), Location (location))
+import qualified Data.ByteString.Char8 as BS (ByteString)
+
+-- | Identifier.
+newtype Ident = Ident String
+   deriving (Eq, Show, Ord)
+
+-- | Lexical tokens.
+data Token 
+   -- Whitespace
+   = Indent SrcLocation                       -- ^ Indentation: increase.
+   | Dedent SrcLocation                       -- ^ Indentation: decrease.
+   | Newline SrcLocation                      -- ^ Newline.
+
+   -- Identifiers 
+   | Identifier SrcLocation !String           -- ^ Identifier.
+
+   -- Literals
+   | String SrcLocation !String               -- ^ Literal: string.
+   | ByteString SrcLocation !BS.ByteString    -- ^ Literal: byte string.
+   | Integer SrcLocation !Integer             -- ^ Literal: integer.
+   | Float SrcLocation !Double                -- ^ Literal: floating point.
+   | Imaginary SrcLocation !Double            -- ^ Literal: imaginary number.
+
+   -- Keywords
+   | Def SrcLocation                          -- ^ Keyword: \'def\'. 
+   | While SrcLocation                        -- ^ Keyword: \'while\'.
+   | If SrcLocation                           -- ^ Keyword: \'if\'.
+   | True SrcLocation                         -- ^ Keyword: \'True\'.
+   | False SrcLocation                        -- ^ Keyword: \'False\'.
+   | Return SrcLocation                       -- ^ Keyword: \'Return\'.
+   | Try SrcLocation                          -- ^ Keyword: \'try\'.
+   | Except SrcLocation                       -- ^ Keyword: \'except\'.
+   | Raise SrcLocation                        -- ^ Keyword: \'raise\'.
+   | In SrcLocation                           -- ^ Keyword: \'in\'.
+   | Is SrcLocation                           -- ^ Keyword: \'is\'.
+   | Lambda SrcLocation                       -- ^ Keyword: \'lambda\'.
+   | Class SrcLocation                        -- ^ Keyword: \'class\'.
+   | Finally SrcLocation                      -- ^ Keyword: \'finally\'.
+   | None SrcLocation                         -- ^ Keyword: \'None\'
+   | For SrcLocation                          -- ^ Keyword: \'for\'.
+   | From SrcLocation                         -- ^ Keyword: \'from\'.
+   | NonLocal SrcLocation                     -- ^ Keyword: \'nonlocal\'.
+   | Global SrcLocation                       -- ^ Keyword: \'global\'.
+   | With SrcLocation                         -- ^ Keyword: \'with\'.
+   | As SrcLocation                           -- ^ Keyword: \'as\'.
+   | Elif SrcLocation                         -- ^ Keyword: \'elif\'.
+   | Yield SrcLocation                        -- ^ Keyword: \'yield\'.
+   | Assert SrcLocation                       -- ^ Keyword: \'assert\'.
+   | Import SrcLocation                       -- ^ Keyword: \'import\'.
+   | Pass SrcLocation                         -- ^ Keyword: \'pass\'.
+   | Break SrcLocation                        -- ^ Keyword: \'break\'.
+   | Continue SrcLocation                     -- ^ Keyword: \'continue\'.
+   | Delete SrcLocation                       -- ^ Keyword: \'del\'.
+   | Else SrcLocation                         -- ^ Keyword: \'else\'.
+   | Not SrcLocation                          -- ^ Keyword: \'not\'.
+   | And SrcLocation                          -- ^ Keyword: boolean conjunction \'and\'.
+   | Or SrcLocation                           -- ^ Keyword: boolean disjunction \'or\'.
+
+   -- Delimiters
+   | At SrcLocation                           -- ^ Delimiter: at sign \'\@\'. 
+   | LeftRoundBracket SrcLocation             -- ^ Delimiter: left round bracket \'(\'.
+   | RightRoundBracket SrcLocation            -- ^ Delimiter: right round bracket \')\'.
+   | LeftSquareBracket SrcLocation            -- ^ Delimiter: left square bracket \'[\'.
+   | RightSquareBracket SrcLocation           -- ^ Delimiter: right square bracket \']\'.
+   | LeftBrace SrcLocation                    -- ^ Delimiter: left curly bracket \'{\'.
+   | RightBrace SrcLocation                   -- ^ Delimiter: right curly bracket \'}\'.
+   | Dot SrcLocation                          -- ^ Delimiter: dot (full stop) \'.\'.
+   | Comma SrcLocation                        -- ^ Delimiter: comma \',\'.
+   | SemiColon SrcLocation                    -- ^ Delimiter: semicolon \';\'.
+   | Colon SrcLocation                        -- ^ Delimiter: colon \':\'.
+   | Ellipsis SrcLocation                     -- ^ Delimiter: ellipses (three dots) \'...\'.
+   | RightArrow SrcLocation                   -- ^ Delimiter: right facing arrow \'->\'.
+   | Assign SrcLocation                       -- ^ Delimiter: assignment \'=\'.
+   | PlusAssign SrcLocation                   -- ^ Delimiter: plus assignment \'+=\'.
+   | MinusAssign SrcLocation                  -- ^ Delimiter: minus assignment \'-=\'.
+   | MultAssign SrcLocation                   -- ^ Delimiter: multiply assignment \'*=\'
+   | DivAssign SrcLocation                    -- ^ Delimiter: divide assignment \'/=\'.
+   | ModAssign SrcLocation                    -- ^ Delimiter: modulus assignment \'%=\'.
+   | PowAssign SrcLocation                    -- ^ Delimiter: power assignment \'**=\'.
+   | BinAndAssign SrcLocation                 -- ^ Delimiter: binary-and assignment \'&=\'.
+   | BinOrAssign SrcLocation                  -- ^ Delimiter: binary-or assignment \'|=\'.
+   | BinXorAssign SrcLocation                 -- ^ Delimiter: binary-xor assignment \'^=\'.
+   | LeftShiftAssign SrcLocation              -- ^ Delimiter: binary-left-shift assignment \'<<=\'.
+   | RightShiftAssign SrcLocation             -- ^ Delimiter: binary-right-shift assignment \'>>=\'.
+   | FloorDivAssign SrcLocation               -- ^ Delimiter: floor-divide assignment \'//=\'.
+
+   -- Operators
+   | Plus SrcLocation                         -- ^ Operator: plus \'+\'.
+   | Minus SrcLocation                        -- ^ Operator: minus: \'-\'.
+   | Mult SrcLocation                         -- ^ Operator: multiply \'*\'.
+   | Div SrcLocation                          -- ^ Operator: divide \'/\'.
+   | GreaterThan SrcLocation                  -- ^ Operator: greater-than \'>\'.
+   | LessThan SrcLocation                     -- ^ Operator: less-than \'<\'.
+   | Equality SrcLocation                     -- ^ Operator: equals \'==\'.
+   | GreaterThanEquals SrcLocation            -- ^ Operator: greater-than-or-equals \'>=\'.
+   | LessThanEquals SrcLocation               -- ^ Operator: less-than-or-equals \'<=\'.
+   | Exponent SrcLocation                     -- ^ Operator: exponential \'**\'.
+   | BinaryOr SrcLocation                     -- ^ Operator: binary-or \'|\'.
+   | Xor SrcLocation                          -- ^ Operator: binary-xor \'^\'.
+   | BinaryAnd SrcLocation                    -- ^ Operator: binary-and \'&\'.
+   | ShiftLeft SrcLocation                    -- ^ Operator: binary-shift-left \'<<\'.
+   | ShiftRight SrcLocation                   -- ^ Operator: binary-shift-right \'>>\'.
+   | Modulo SrcLocation                       -- ^ Operator: modulus \'%\'.
+   | FloorDiv SrcLocation                     -- ^ Operator: floor-divide \'//\'.
+   | Tilde SrcLocation                        -- ^ Operator: tilde \'~\'.
+   | NotEquals SrcLocation                    -- ^ Operator: not-equals \'!=\'.
+
+   -- Special cases
+   | EOF                                      -- ^ End of file (no source location). 
+   deriving (Show, Eq, Ord)
+
+-- XXX fixme
+instance Location Token where
+   location x = NoLocation
+
diff --git a/src/Language/Python/Version3/Syntax/AST.hs b/src/Language/Python/Version3/Syntax/AST.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Syntax/AST.hs
@@ -0,0 +1,405 @@
+{-# OPTIONS  #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Syntax.AST 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Representation of the Python version 3 abstract syntax. 
+--
+-- See: 
+--
+-- * <http://docs.python.org/dev/3.0/reference/index.html> for an overview of the language. 
+--
+-- * <http://docs.python.org/dev/3.0/reference/grammar.html> for the full grammar.
+--
+-- Note: there are cases where the AST is more liberal than the formal grammar
+-- of the language. Therefore some care must be taken when constructing
+-- Python programs using the raw AST. XXX At some point we should provide
+-- smart constructors which ensure syntactic correctness of the AST.
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Syntax.AST ( 
+   -- * Modules
+   Module (..)
+   -- * Identifiers and dotted names
+   , Ident (..)
+   , DottedName
+   -- * Statements, suites, parameters, decorators and assignment operators
+   , Statement (..)
+   , Suite
+   , Parameter (..)
+   , Decorator (..)
+   , AssignOp (..)
+   -- * Expressions, operators, arguments and slices
+   , Expr (..)
+   , Op (..)
+   , Argument (..)
+   , Slice (..)
+   -- * Imports
+   , ImportItem (..)
+   , FromItem (..)
+   , FromItems (..)
+   , ImportModule (..)
+   -- * Exceptions
+   , Handler
+   , ExceptClause
+   -- * Comprehensions
+   , Comprehension (..)
+   , CompFor (..)
+   , CompIf (..)
+   , CompIter (..)
+   )
+   where
+
+import Language.Python.Version3.Parser.Token ( Ident (..) ) 
+import qualified Data.ByteString.Char8 as BS
+
+--------------------------------------------------------------------------------
+
+-- | A module (Python source file). See <http://docs.python.org/dev/3.0/reference/toplevel_components.html>.
+newtype Module = Module [Statement] -- ^ A module is just a sequence of top-level statements.
+   deriving Show
+
+-- | A block of statements. A suite is a group of statements controlled by a clause, 
+-- for example, the body of a loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html>.
+type Suite = [Statement] 
+
+-- | A compound name constructed with the dot operator.
+type DottedName = [Ident]
+
+-- | An entity imported using the \'import\' keyword.
+-- See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-import-statement>.
+data ImportItem = 
+   ImportItem 
+   { import_item_name :: DottedName -- ^ The name of module to import.
+   , import_as_name :: Maybe Ident  -- ^ An optional name to refer to the entity (the \'as\' name). 
+   }
+   deriving Show
+
+-- | An entity imported using the \'from ... import\' construct.
+-- See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-import-statement>
+data FromItem = 
+   FromItem 
+   { from_item_name :: Ident -- ^ The name of the entity imported. 
+   , from_as_name :: Maybe Ident -- ^ An optional name to refer to the entity (the \'as\' name).
+   }
+   deriving Show
+
+-- | Items imported using the \'from ... import\' construct.
+data FromItems 
+   = ImportEverything -- ^ Import everything exported from the module.
+   | FromItems [FromItem] -- ^ Import a specific list of items from the module.
+   deriving Show
+
+-- | A reference to the module to import from using the \'from ... import\' construct.
+data ImportModule 
+    = ImportRelative ImportModule  -- ^ Relative import. A dot followed by something.
+    | ImportDot                    -- ^ Relative import. Dot on its own.
+    | ImportName DottedName        -- ^ The name of the module to import from. 
+    deriving Show
+
+-- | Statements.
+--
+--  See:
+--
+-- * <http://docs.python.org/dev/3.0/reference/simple_stmts.html>
+--
+-- * <http://docs.python.org/dev/3.0/reference/compound_stmts.html>
+data Statement 
+   -- | Import statement.
+   = Import { import_items :: [ImportItem] -- ^ Items to import.
+     } 
+   -- | From ... import statement.
+   | FromImport 
+     { from_module :: ImportModule -- ^ Module to import from.
+     , from_items :: FromItems  -- ^ Items to import.
+     }
+   -- | While loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-while-statement>.
+   | While 
+     { while_cond :: Expr -- ^ Loop condition.
+     , while_body :: Suite -- ^ Loop body.
+     , while_else :: Suite -- ^ Else clause.
+     }
+   -- | For loop. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-for-statement>.
+   | For 
+     { for_targets :: [Expr] -- ^ Loop variables.
+     , for_generator :: Expr -- ^ Loop generator. 
+     , for_body :: Suite -- ^ Loop body
+     , for_else :: Suite  -- ^ Else clause.
+     }
+   -- | Function definition. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#function-definitions>.
+   | Fun 
+     { fun_name :: Ident -- ^ Function name.
+     , fun_args :: [Parameter] -- ^ Function parameter list.
+     , fun_result_annotation :: Maybe Expr -- ^ Optional result annotation.
+     , fun_body :: Suite -- ^ Function body.
+     }
+   -- | Class definition. See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#class-definitions>.
+   | Class 
+     { class_name :: Ident -- ^ Class name.
+     , class_args :: [Argument] -- ^ Class argument list.
+     , class_body :: Suite -- ^ Class body.
+     }
+   -- | Conditional statement (if-elif-else). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-if-statement>.  
+   | Conditional 
+     { cond_guards :: [(Expr, Suite)] -- ^ Sequence of if-elif conditional clauses.
+     , cond_else :: Suite -- ^ Possibly empty unconditional else clause.
+     }
+   -- | Assignment statement. See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#assignment-statements>.
+   | Assign 
+     { assign_to :: [Expr] -- ^ Entity to assign to. XXX perhaps this should not be a list.
+     , assign_expr :: Expr -- ^ Expression to evaluate.
+     }
+   -- | Augmented assignment statement. See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#augmented-assignment-statements>.
+   | AugmentedAssign 
+     { aug_assign_to :: Expr -- ^ Entity to assign to.
+     , aug_assign_op :: AssignOp -- ^ Assignment operator (for example \'+=\').
+     , aug_assign_expr :: Expr  -- ^ Expression to evaluate.
+     }
+   -- | Decorated definition of a function or class.
+   | Decorated 
+     { decorated_decorators :: [Decorator] -- ^ Decorators.
+     , decorated_def :: Statement -- ^ Function or class definition to be decorated.
+     }
+   -- | Return statement (may only occur syntactically nested in a function definition). See <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-return-statement>.
+   | Return 
+     { return_expr :: Maybe Expr -- ^ Optional expression to evaluate and return to caller.
+     }
+   -- | Try statement (exception handling). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.
+   | Try 
+     { try_body :: Suite -- ^ Try clause.
+     , try_excepts :: [Handler] -- ^ Exception handlers.
+     , try_else :: Suite -- ^ Possibly empty else clause, executed if and when control flows off the end of the try clause.
+     , try_finally :: Suite -- ^ Possibly empty finally clause.
+     }
+   -- | Raise statement (exception throwing). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-raise-statement>
+   | Raise 
+    { raise_expr :: Maybe (Expr, Maybe Expr) -- ^ Optional expression to evaluate, and optional \'from\' clause.
+    }
+   -- | With statement (context management). See <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-with-statement>. And also see: <http://www.python.org/dev/peps/pep-0343/>.
+   | With 
+     { with_context :: Expr -- ^ Context expression (yields a context manager).
+     , with_as :: Maybe Expr -- ^ Optional target.
+     , with_body :: Suite -- ^ Suite to be managed.
+     }
+   -- | Pass statement (null operation). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-pass-statement>
+   | Pass
+   -- | Break statement (may only occur syntactically nested in a for or while loop, but not nested in a function or class definition within that loop). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-break-statement>.
+   | Break
+   -- | Continue statement (may only occur syntactically nested in a for or while loop, but not nested in a function or class definition or finally clause within that loop). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-continue-statement>.
+   | Continue
+   -- | Del statement (delete). See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-del-statement>. 
+   | Delete 
+     { del_exprs :: [Expr] -- ^ Items to delete.
+     }
+   -- | Expression statement. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#expression-statements>. 
+   | StmtExpr { stmt_expr :: Expr }
+   -- | Global declaration. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-global-statement>. 
+   | Global 
+     { global_vars :: [Ident] -- ^ Variables declared global in the current block.
+     }
+   -- | Nonlocal declaration. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-nonlocal-statement>.
+   | NonLocal 
+     { nonLocal_vars :: [Ident] -- ^ Variables declared nonlocal in the current block (their binding comes from bound the nearest enclosing scope).
+     }
+   -- | Assertion. See: <http://docs.python.org/dev/3.0/reference/simple_stmts.html#the-assert-statement>.
+   | Assert 
+     { assert_exprs :: [Expr] -- ^ Expressions being asserted.
+     }
+   deriving Show
+
+-- | Decorator.
+data Decorator = 
+   Decorator 
+   { decorator_name :: DottedName -- ^ Decorator name.
+   , decorator_args :: [Argument] -- ^ Decorator arguments.
+   }
+   deriving Show
+
+-- | Formal parameter of function definitions and lambda expressions.
+-- 
+-- See:
+--
+-- * <http://docs.python.org/dev/3.0/reference/compound_stmts.html#function-definitions>
+--
+-- * <http://docs.python.org/dev/3.0/reference/expressions.html#calls>
+data Parameter
+   -- | Ordinary named parameter.
+   = Param 
+     { param_name :: Ident -- ^ Parameter name.
+     , param_annotation :: Maybe Expr -- ^ Optional annotation.
+     , param_default :: Maybe Expr -- ^ Optional default value.
+     }
+   -- | Excess positional parameter (single asterisk before its name in the concrete syntax). 
+   | VarArgsPos 
+     { param_name :: Ident -- ^ Parameter name.
+     , param_annotation :: Maybe Expr -- ^ Optional annotation.
+     }
+   -- | Excess keyword parameter (double asterisk before its name in the concrete syntax).
+   | VarArgsKeyword 
+     { param_name :: Ident -- ^ Parameter name.
+     , param_annotation :: Maybe Expr -- ^ Optional annotation.
+     }
+   -- | Marker for the end of positional parameters (not a parameter itself).
+   | EndPositional 
+   deriving Show
+
+-- | Arguments to function calls, class declarations and decorators.
+data Argument
+   -- | Ordinary argument expression.
+   = ArgExpr { arg_expr :: Expr }
+   -- | Excess positional argument.
+   | ArgVarArgsPos { arg_expr :: Expr }
+   -- | Excess keyword argument.
+   | ArgVarArgsKeyword { arg_expr :: Expr }
+   -- | Keyword argument.
+   | ArgKeyword 
+     { arg_keyword :: Ident -- ^ Keyword name.
+     , arg_expr :: Expr -- ^ Argument expression.
+     }
+   deriving Show 
+
+-- | Exception handler. See: <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.
+type Handler = (ExceptClause, Suite)
+-- | Exception clause. See: <http://docs.python.org/dev/3.0/reference/compound_stmts.html#the-try-statement>.
+type ExceptClause = Maybe (Expr, Maybe Ident)
+
+-- | Comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries> 
+data Comprehension e
+   = Comprehension { comprehension_expr :: e, comprehension_for :: CompFor }
+   deriving Show
+
+-- | Comprehension \'for\' component. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>
+data CompFor = CompFor { comp_for_exprs :: [Expr], comp_in_expr :: Expr, comp_for_iter :: Maybe CompIter }
+   deriving Show
+
+-- | Comprehension guard. See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>.
+data CompIf = CompIf { comp_if :: Expr, comp_if_iter :: Maybe CompIter }
+   deriving Show
+
+-- | Comprehension iterator (either a \'for\' or an \'if\'). See: <http://docs.python.org/dev/3.0/reference/expressions.html#displays-for-lists-sets-and-dictionaries>.
+data CompIter = IterFor CompFor | IterIf CompIf
+   deriving Show
+
+-- | Expression.
+-- 
+-- See: <http://docs.python.org/dev/3.0/reference/expressions.html>.
+data Expr
+   -- | Variable.
+   = Var Ident
+   -- | Literal integer.
+   | Int Integer
+   -- | Literal floating point number.
+   | Float Double 
+   -- | Literal imaginary number.
+   | Imaginary { imaginary_value :: Double } 
+   -- | Literal boolean.
+   | Bool Bool
+   -- | Literal \'None\' value.
+   | None 
+   -- | Ellipsis \'...\'.
+   | Ellipsis
+   -- | Literal byte string.
+   | ByteStrings [BS.ByteString]
+   -- | Literal strings (to be concatentated together).
+   | Strings [String]
+   -- | Function call. See: <http://docs.python.org/dev/3.0/reference/expressions.html#calls>.
+   | Call 
+     { call_fun :: Expr -- ^ Expression yielding a callable object (such as a function).
+     , call_args :: [Argument] -- ^ Call arguments.
+     }
+   -- | Subscription, for example \'x [y]\'. See: <http://docs.python.org/dev/3.0/reference/expressions.html#id5>.
+   | Subscript { subscriptee :: Expr, subscript_exprs :: [Expr] }
+   -- | Slicing, for example \'w [x:y:z]\'. See: <http://docs.python.org/dev/3.0/reference/expressions.html#id6>.
+   | SlicedExpr { slicee :: Expr, slices :: [Slice] } 
+   -- | Conditional expresison. See: <http://docs.python.org/dev/3.0/reference/expressions.html#boolean-operations>. 
+   | CondExpr 
+     { ce_true_branch :: Expr -- ^ Expression to evaluate if condition is True.
+     , ce_condition :: Expr -- ^ Boolean condition.
+     , ce_false_branch :: Expr -- ^ Expression to evaluate if condition is False.
+     }
+   -- | Binary operator application.
+   | BinaryOp { operator :: Op, left_op_arg :: Expr, right_op_arg :: Expr }
+   -- | Unary operator application.
+   | UnaryOp { operator :: Op, op_arg :: Expr }
+   -- | Anonymous function definition (lambda). See: <http://docs.python.org/dev/3.0/reference/expressions.html#id15>.
+   | Lambda { lambda_args :: [Parameter], lambda_body :: Expr }
+   -- | N-ary tuple of arity greater than 0. The list should not be empty.
+   | Tuple { tuple_exprs :: [Expr] }
+   -- | Generator yield. See: <http://docs.python.org/dev/3.0/reference/expressions.html#yield-expressions>.
+   | Yield 
+     { yield_expr :: Maybe Expr -- ^ Optional expression to yield.
+     }
+   -- | Generator. See: <http://docs.python.org/dev/3.0/reference/expressions.html#generator-expressions>.
+   | Generator { gen_comprehension :: Comprehension Expr }
+   -- | List comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#list-displays>.
+   | ListComp { list_comprehension :: Comprehension Expr }
+   -- | List. See: <http://docs.python.org/dev/3.0/reference/expressions.html#list-displays>.
+   | List { list_exprs :: [Expr] }
+   -- | Dictionary. See: <http://docs.python.org/dev/3.0/reference/expressions.html#dictionary-displays>.
+   | Dictionary { dict_mappings :: [(Expr, Expr)] }
+   -- | Dictionary comprehension. See: <http://docs.python.org/dev/3.0/reference/expressions.html#dictionary-displays>.
+   | DictComp { dict_comprehension :: Comprehension (Expr, Expr) }
+   -- | Set. See: <http://docs.python.org/dev/3.0/reference/expressions.html#set-displays>.
+   | Set { set_exprs :: [Expr] } 
+   -- | Set comprehension. <http://docs.python.org/dev/3.0/reference/expressions.html#set-displays>.
+   | SetComp { set_comprehension :: Comprehension Expr }
+   -- | Starred expression. 
+   | Starred { starred_expr :: Expr }
+   deriving Show
+
+data Slice
+   = SliceProper { slice_lower :: Maybe Expr, slice_upper :: Maybe Expr, slice_stride :: Maybe (Maybe Expr) } 
+   | SliceExpr { slice_expr :: Expr }
+   deriving Show
+
+-- | Operators.
+data Op 
+   = And -- ^ \'and\'
+   | Or -- ^ \'or\'
+   | Not -- ^ \'not\'
+   | Exponent -- ^ \'**\'
+   | LessThan -- ^ \'<\'
+   | GreaterThan -- ^ \'>\'
+   | Equality -- ^ \'==\'
+   | GreaterThanEquals -- ^ \'>=\'
+   | LessThanEquals -- ^ \'<=\'
+   | NotEquals  -- ^ \'!=\'
+   | In -- ^ \'in\'
+   | Is -- ^ \'is\'
+   | IsNot -- ^ \'is not\'
+   | NotIn -- ^ \'not in\'
+   | BinaryOr -- ^ \'|\'
+   | Xor -- ^ \'^\'
+   | BinaryAnd -- ^ \'&\'
+   | ShiftLeft -- ^ \'<<\'
+   | ShiftRight -- ^ \'>>\'
+   | Multiply -- ^ \'*\'
+   | Plus -- ^ \'+\'
+   | Minus -- ^ \'-\'
+   | Divide -- ^ \'\/\'
+   | FloorDivide -- ^ \'\/\/\'
+   | Invert -- ^ \'~\' (bitwise inversion of its integer argument)
+   | Modulo -- ^ \'%\'
+   | Dot -- ^ \'.\'
+   deriving (Eq, Show)
+
+-- | Augmented assignment operators.
+data AssignOp
+   = PlusAssign -- ^ \'+=\'
+   | MinusAssign -- ^ \'-=\'
+   | MultAssign -- ^ \'*=\'
+   | DivAssign -- ^ \'\/=\'
+   | ModAssign -- ^ \'%=\'
+   | PowAssign -- ^ \'*=\'
+   | BinAndAssign -- ^ \'&=\'
+   | BinOrAssign -- ^ \'|=\'
+   | BinXorAssign -- ^ \'^=\' 
+   | LeftShiftAssign -- ^ \'<<=\'
+   | RightShiftAssign -- ^ \'>>=\'
+   | FloorDivAssign -- ^ \'\/\/=\'
+   deriving (Eq, Show)
diff --git a/src/Language/Python/Version3/Syntax/Pretty.hs b/src/Language/Python/Version3/Syntax/Pretty.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Python/Version3/Syntax/Pretty.hs
@@ -0,0 +1,299 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      : Language.Python.Version3.Syntax.Pretty 
+-- Copyright   : (c) 2009 Bernie Pope 
+-- License     : BSD-style
+-- Maintainer  : bjpop@csse.unimelb.edu.au
+-- Stability   : experimental
+-- Portability : ghc
+--
+-- Pretty printing of the Python version 3 abstract syntax. XXX not quite
+-- complete.
+-----------------------------------------------------------------------------
+
+module Language.Python.Version3.Syntax.Pretty where
+
+import Language.Python.Version3.Syntax.AST 
+
+import Text.PrettyPrint as TextPP
+import qualified Data.ByteString.Char8 as BS
+
+--------------------------------------------------------------------------------
+
+-- | All types which can be transformed into a 'Doc'.
+class Pretty a where
+   pretty :: a -> Doc
+
+-- | Transform values into strings.
+prettyText :: Pretty a => a -> String
+prettyText = render . pretty
+
+-- | Conditionally wrap parentheses around an item.
+parensIf :: Pretty a => (a -> Bool) -> a -> Doc
+parensIf test x = if test x then parens $ pretty x else pretty x 
+
+-- | A list of things separated by commas.
+commaList :: Pretty a => [a] -> Doc
+commaList = hsep . punctuate comma . map pretty 
+
+instance Pretty BS.ByteString where
+   -- XXX should handle the escaping properly
+   pretty b = text "b" <> text (show $ BS.unpack b)
+
+instance Pretty Int where
+  pretty = int
+
+instance Pretty Integer where
+  pretty = integer
+
+instance Pretty Double where
+   pretty = double
+
+instance Pretty Bool where
+  pretty True = text "True"
+  pretty False = text "False"
+
+instance Pretty a => Pretty (Maybe a) where
+   pretty Nothing = empty
+   pretty (Just x) = pretty x
+
+prettyString :: String -> Doc
+   -- XXX should handle the escaping properly
+prettyString str = text (show str)
+
+instance Pretty Module where
+   -- pretty :: Module -> Doc 
+   pretty (Module stmts) = vcat $ map pretty stmts 
+
+instance Pretty Ident where
+   pretty (Ident name) = text name
+
+dot :: Doc
+dot = char '.'
+
+prettyDottedName :: DottedName -> Doc
+prettyDottedName [] = empty
+prettyDottedName [name] = pretty name
+prettyDottedName (name:rest@(_:_))
+   = pretty name <> dot <> prettyDottedName rest
+
+instance Pretty ImportItem where
+   pretty (ImportItem {import_item_name = name, import_as_name = asName})
+      = prettyDottedName name <+> (maybe empty (\n -> text "as" <+> pretty n) asName)
+
+instance Pretty FromItem where
+   pretty (FromItem { from_item_name = name, from_as_name = asName })
+      = pretty name <+> (maybe empty (\n -> text "as" <+> pretty n) asName) 
+
+instance Pretty FromItems where
+   pretty ImportEverything = char '*'
+   pretty (FromItems [item]) = pretty item 
+   pretty (FromItems items) = parens (commaList items)
+
+instance Pretty ImportModule where
+   pretty (ImportRelative importModule) = dot <> pretty importModule
+   pretty ImportDot = dot
+   pretty (ImportName dottedName) = prettyDottedName dottedName 
+
+prettySuite :: [Statement] -> Doc
+prettySuite stmts = vcat $ map pretty stmts 
+
+optionalKeywordSuite :: String -> [Statement] -> Doc
+optionalKeywordSuite _ [] = empty
+optionalKeywordSuite keyword stmts = text keyword <> colon $+$ indent (prettySuite stmts)
+
+prettyArgList :: [Argument] -> Doc
+prettyArgList = parens . commaList 
+
+prettyOptionalArgList :: [Argument] -> Doc
+prettyOptionalArgList [] = empty
+prettyOptionalArgList list = parens $ commaList list
+
+prettyGuards :: [(Expr, Suite)] -> Doc
+prettyGuards [] = empty
+prettyGuards ((cond,body):guards)
+   = text "elif" <+> pretty cond <> colon $+$ indent (prettySuite body) $+$
+     prettyGuards guards
+
+indent :: Doc -> Doc
+indent doc = nest 4 doc
+
+-- XXX is there a better way to do this?
+blankLine :: Doc
+blankLine = text []
+
+instance Pretty Statement where
+   -- pretty :: Statement -> Doc 
+   pretty (Import { import_items = items}) = text "import" <+> commaList items 
+   pretty stmt@(FromImport {})
+      = text "from" <+> pretty (from_module stmt) <+> text "import" <+> pretty (from_items stmt)
+   pretty stmt@(While {})
+      = text "while" <+> pretty (while_cond stmt) <> colon $+$
+        indent (prettySuite (while_body stmt)) $+$ optionalKeywordSuite "else" (while_else stmt)
+   pretty stmt@(For {})
+      = text "for" <+> commaList (for_targets stmt) <+> text "in" <+> pretty (for_generator stmt) <> colon $+$
+        indent (prettySuite (for_body stmt)) $+$ optionalKeywordSuite "else" (for_else stmt)
+   pretty stmt@(Fun {})
+      = text "def" <+> pretty (fun_name stmt) <> parens (commaList (fun_args stmt)) <+> 
+        pretty (fun_result_annotation stmt) <> colon $+$ indent (prettySuite (fun_body stmt)) 
+   pretty stmt@(Class {})
+      = text "class" <+> pretty (class_name stmt) <> prettyOptionalArgList (class_args stmt) <> 
+        colon $+$ indent (prettySuite (class_body stmt)) 
+   pretty stmt@(Conditional { cond_guards = guards, cond_else = optionalElse })
+      = case guards of
+           (cond,body):xs -> 
+              text "if" <+> pretty cond <> colon $+$ indent (prettySuite body) $+$ 
+              prettyGuards xs $+$
+              optionalKeywordSuite "else" optionalElse
+   -- XXX is the assign_to always a singleton?
+   pretty (Assign { assign_to = pattern, assign_expr = e })
+      = commaList pattern <+> equals <+> pretty e
+   pretty (AugmentedAssign { aug_assign_to = to_expr, aug_assign_op = op, aug_assign_expr = e})
+      = pretty to_expr <+> pretty op <+> pretty e 
+   pretty (Decorated { decorated_decorators = decs, decorated_def = stmt})
+      = vcat (map pretty decs) $+$ pretty stmt
+   pretty (Return { return_expr = e }) = text "return" <+> pretty e
+   pretty (Try { try_body = body, try_excepts = handlers, try_else = optionalElse, try_finally = finally})
+      = text "try" <> colon $+$ indent (prettySuite body) $+$
+        prettyHandlers handlers $+$ optionalKeywordSuite "else" optionalElse $+$ 
+        optionalKeywordSuite "finally" finally 
+   pretty (Raise { raise_expr = e })
+      = text "raise" <+> 
+        maybe empty (\ (x, fromE) -> pretty x <+> (maybe empty (\f -> text "from" <+> pretty f) fromE)) e
+   pretty (With { with_context = context, with_as = asExpr, with_body = body })
+      = text "with" <+> maybe empty (\e -> text "as" <+> pretty e) asExpr <> colon $+$
+        indent (prettySuite body)
+   pretty Pass = text "pass"
+   pretty Break = text "break"
+   pretty Continue = text "continue"
+   pretty (Delete { del_exprs = es }) = text "del" <+> commaList es
+   pretty (StmtExpr { stmt_expr = e }) = pretty e
+   pretty (Global { global_vars = idents }) = text "global" <+> commaList idents
+   pretty (NonLocal { nonLocal_vars = idents }) = text "nonlocal" <+> commaList idents
+   pretty (Assert { assert_exprs = es }) = text "assert" <+> commaList es
+
+prettyHandlers :: [Handler] -> Doc
+prettyHandlers = foldr (\next rec -> prettyHandler next $+$ rec) empty
+
+prettyHandler :: Handler -> Doc
+prettyHandler (exceptClause, suite) 
+   = text "except" <+> prettyExceptClause exceptClause <> colon $+$ indent (prettySuite suite)
+prettyExceptClause :: ExceptClause -> Doc
+prettyExceptClause Nothing = empty
+prettyExceptClause (Just (e, target))
+   = pretty e <+> maybe empty (\t -> text "as" <+> pretty t) target
+
+instance Pretty Decorator where
+   pretty (Decorator { decorator_name = name, decorator_args = args })
+      = char '@' <> prettyDottedName name <+> prettyOptionalArgList args
+
+instance Pretty Parameter where
+   pretty (Param { param_name = ident, param_annotation = annot, param_default = def})
+      = pretty ident <> (maybe empty (\e -> colon <> pretty e <> space) annot) <> 
+        maybe empty (\e -> equals <> pretty e) def 
+   pretty (VarArgsPos { param_name = ident, param_annotation = annot})
+      = char '*' <> pretty ident <> (maybe empty (\e -> colon <> pretty e) annot)
+   pretty (VarArgsKeyword { param_name = ident, param_annotation = annot })
+      = text "**" <> pretty ident <> (maybe empty (\e -> colon <> pretty e) annot)
+   pretty EndPositional = char '*' 
+
+instance Pretty Argument where
+   pretty (ArgExpr { arg_expr = e }) = pretty e
+   pretty (ArgVarArgsPos { arg_expr = e}) = char '*' <> pretty e
+   pretty (ArgVarArgsKeyword { arg_expr = e }) = text "**" <> pretty e
+   pretty (ArgKeyword { arg_keyword = ident, arg_expr = e }) 
+      = pretty ident <> equals <> pretty e
+
+instance Pretty a => Pretty (Comprehension a) where
+   pretty (Comprehension { comprehension_expr = e, comprehension_for = for }) 
+      = pretty e <+> pretty for 
+
+instance Pretty CompFor where
+   pretty (CompFor { comp_for_exprs = es, comp_in_expr = e, comp_for_iter = iter }) 
+      = text "for" <+> commaList es <+> text "in" <+> pretty e <+> pretty iter
+
+instance Pretty CompIf where
+   pretty (CompIf { comp_if = e, comp_if_iter = iter }) 
+      = text "if" <+> pretty e <+> pretty iter 
+
+instance Pretty CompIter where
+   pretty (IterFor compFor) = pretty compFor 
+   pretty (IterIf compIf) = pretty compIf
+
+instance Pretty Expr where
+   pretty (Var i) = pretty i
+   pretty (Int i) = pretty i
+   pretty (Float d) = pretty d
+   pretty (Imaginary { imaginary_value = i }) = pretty i <> char 'j' 
+   pretty (Bool b) = pretty b
+   pretty None = text "None"
+   pretty Ellipsis = text "..."
+   pretty (ByteStrings bs) = hcat (map pretty bs)
+   pretty (Strings ss) = hcat (map prettyString ss)
+   pretty (Call { call_fun = f, call_args = args }) = pretty f <> prettyArgList args
+   pretty (Subscript { subscriptee = e, subscript_exprs = subs })
+      = pretty e <> brackets (commaList subs)
+   pretty (SlicedExpr { slicee = e, slices = ss })
+      = pretty e <> brackets (commaList ss) 
+   pretty (CondExpr { ce_true_branch = trueBranch, ce_condition = cond, ce_false_branch = falseBranch })
+      = pretty trueBranch <+> text "if" <+> pretty cond <+> text "else" <+> pretty falseBranch
+   pretty (BinaryOp { operator = op, left_op_arg = left, right_op_arg = right })
+      = pretty left <> (if op == Dot then dot else space <> pretty op <> space) <> pretty right
+   pretty (UnaryOp { operator = op, op_arg = e }) = pretty op <+> pretty e
+   pretty (Lambda { lambda_args = args, lambda_body = body })
+      = text "lambda" <+> commaList args <> colon <+> pretty body
+   pretty (Tuple { tuple_exprs = es }) = parens $ commaList es
+   pretty (Yield { yield_expr = e })
+      = text "yield" <+> pretty e
+   pretty (List { list_exprs = es }) = brackets (commaList es)
+   pretty (Dictionary { dict_mappings = mappings })
+      = braces (hsep (punctuate comma $ map (\ (e1,e2) -> pretty e1 <> colon <> pretty e2) mappings))
+   pretty (Set { set_exprs = es }) = braces $ commaList es
+
+instance Pretty Slice where
+   pretty (SliceProper { slice_lower = lower, slice_upper = upper, slice_stride = stride })
+      = pretty lower <> colon <> pretty upper <> (maybe empty (\s -> colon <> pretty s) stride)
+   pretty (SliceExpr { slice_expr = e }) = pretty e
+
+instance Pretty Op where
+   pretty And = text "and"
+   pretty Or = text "or"
+   pretty Not = text "not"
+   pretty Exponent = text "**"
+   pretty LessThan = text "<"
+   pretty GreaterThan = text ">"
+   pretty Equality = text "=="
+   pretty GreaterThanEquals = text ">="
+   pretty LessThanEquals = text "<="
+   pretty NotEquals = text "!="
+   pretty In = text "in"
+   pretty Is = text "is"
+   pretty IsNot = text "is not"
+   pretty NotIn = text "not in"
+   pretty BinaryOr = text "|"
+   pretty Xor = text "^"
+   pretty BinaryAnd = text "&"
+   pretty ShiftLeft = text "<<"
+   pretty ShiftRight = text ">>"
+   pretty Multiply = text "*"
+   pretty Plus = text "+"
+   pretty Minus = text "-"
+   pretty Divide = text "/"
+   pretty FloorDivide = text "//"
+   pretty Invert = text "~"
+   pretty Modulo = text "%"
+   pretty Dot = dot
+
+instance Pretty AssignOp where
+   pretty PlusAssign = text "+="
+   pretty MinusAssign = text "-="
+   pretty MultAssign = text "*="
+   pretty DivAssign = text "/="
+   pretty ModAssign = text "%="
+   pretty PowAssign = text "**="
+   pretty BinAndAssign = text "&="
+   pretty BinOrAssign = text "|="
+   pretty BinXorAssign = text "^="
+   pretty LeftShiftAssign = text "<<="
+   pretty RightShiftAssign = text ">>="
+   pretty FloorDivAssign = text "//="
