diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+* 0.10.0.1
+    - make it compile with GHC 7.10.1
+
 * 0.10.0.0
     - upgraded dependency on Isabelle to Isabelle2014
     - add support for explicit matching and non-matching steps in protocols
diff --git a/dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs b/dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs
deleted file mode 100644
--- a/dist/build/scyther-proof/scyther-proof-tmp/Scyther/Theory/Lexer.hs
+++ /dev/null
@@ -1,623 +0,0 @@
-{-# LANGUAGE CPP,MagicHash #-}
-{-# LINE 1 "src/Scyther/Theory/Lexer.x" #-}
-
--- Ignore the slew of warnings from definitions generated by Alex.
--- NOTE: you should disable this line when working on this module to make sure
--- that you don't miss important warnings.
-{-# OPTIONS_GHC -fno-warn-missing-signatures -fno-warn-unused-binds #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches -fno-warn-name-shadowing #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
-module Scyther.Theory.Lexer where
-
-import Control.Applicative
-import Control.Monad
-import Data.Word (Word8)
-import qualified Codec.Binary.UTF8.String as UTF8
-
-#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\xbb\x00\x00\x00\xa7\x01\x00\x00\x1c\x02\x00\x00\x9c\x02\x00\x00\x1c\x03\x00\x00\x9c\x03\x00\x00\x1c\x04\x00\x00\x9c\x04\x00\x00\x00\x00\x00\x00\x0d\x05\x00\x00\x00\x00\x00\x00\x7e\x05\x00\x00\x00\x00\x00\x00\xef\x05\x00\x00\x7e\xff\xff\xff\x00\x00\x00\x00\xb8\xff\xff\xff\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x6f\x06\x00\x00\xca\xff\xff\xff\xad\xff\xff\xff\x82\xff\xff\xff\x5f\xff\xff\xff\xaf\x06\x00\x00\x58\x07\x00\x00\x18\x07\x00\x00\x00\x00\x00\x00\xe2\xff\xff\xff\xe3\xff\xff\xff\xe4\xff\xff\xff\x18\x08\x00\x00\xd8\x07\x00\x00\x00\x00\x00\x00\xd8\x08\x00\x00\x98\x08\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x8e\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xff\xff\x00\x00\x00\x00\xe7\xff\xff\xff\xe8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\xff\xff\xff\x00\x00\x00\x00\xe9\xff\xff\xff\xea\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x0a\x00\x00\xc1\x0a\x00\x00\x24\x0b\x00\x00\x87\x0b\x00\x00\xea\x0b\x00\x00\x4d\x0c\x00\x00\xb0\x0c\x00\x00\x13\x0d\x00\x00\x76\x0d\x00\x00\xd9\x0d\x00\x00\x3c\x0e\x00\x00\x9f\x0e\x00\x00\x02\x0f\x00\x00\x65\x0f\x00\x00\xc8\x0f\x00\x00\x2b\x10\x00\x00\x8e\x10\x00\x00\xf1\x10\x00\x00\x54\x11\x00\x00\xb7\x11\x00\x00\x1a\x12\x00\x00"#
-
-alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x1b\x00\x19\x00\x63\x00\x4c\x00\x43\x00\x42\x00\x38\x00\x37\x00\x36\x00\x2d\x00\x39\x00\x2f\x00\x2b\x00\x30\x00\x2c\x00\x31\x00\x2a\x00\x00\x00\x28\x00\x5a\x00\x4e\x00\x55\x00\x53\x00\x62\x00\x5b\x00\x4d\x00\x45\x00\x46\x00\x56\x00\x60\x00\x44\x00\x5f\x00\x5d\x00\x4b\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x52\x00\x64\x00\x57\x00\x51\x00\x58\x00\x59\x00\x54\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x47\x00\x18\x00\x48\x00\x50\x00\x5e\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6f\x00\x6a\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x49\x00\x5c\x00\x4a\x00\x4f\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x17\x00\x1a\x00\x16\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2e\x00\x61\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x35\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x23\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x13\x00\x07\x00\x0b\x00\x0b\x00\x0b\x00\x0c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x3b\x00\x3a\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x1c\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1d\x00\x05\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11\x00\x08\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x22\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x1c\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x03\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x04\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x12\x00\x05\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x13\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\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x26\x00\x03\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x06\x00\x0d\x00\x0d\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x78\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x77\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x76\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x68\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x69\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x75\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x74\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6d\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x73\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6e\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x70\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x71\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6c\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x6b\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x79\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x67\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x66\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x00\x16\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x65\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x88\x00\x89\x00\x3e\x00\x5c\x00\x88\x00\xac\x00\x2a\x00\x2a\x00\x2a\x00\x29\x00\x7d\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2f\x00\x2a\x00\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x2d\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\x2d\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\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x2d\x00\xc2\x00\xc3\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2a\x00\x3e\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\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\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xff\xff\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\x80\x00\xff\xff\xff\xff\x83\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\xa7\x00\xa8\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\x7b\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xc3\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
-
-alex_deflt :: AlexAddr
-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x10\x00\x12\x00\x12\x00\x14\x00\x14\x00\xff\xff\x1e\x00\x1e\x00\x24\x00\x24\x00\x27\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x3b\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x33\x00\x33\x00\x33\x00\x29\x00\x29\x00\x29\x00\xff\xff\x29\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"#
-
-alex_accept = listArray (0::Int,121) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_15),AlexAcc (alex_action_15),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),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_40),AlexAcc (alex_action_41),AlexAcc (alex_action_42),AlexAcc (alex_action_43),AlexAcc (alex_action_44),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_51),AlexAcc (alex_action_52),AlexAcc (alex_action_53),AlexAcc (alex_action_54),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55),AlexAcc (alex_action_55)]
-{-# LINE 93 "src/Scyther/Theory/Lexer.x" #-}
-
-
--- | Lex a keyword
-keyword :: Keyword -> AlexAction Keyword
-keyword kw input len = return kw
-
--- | Wrap a string into a keyword
-scanString :: (String -> Keyword) -> AlexAction Keyword
-scanString kw (_,_,_,input) len = return $ kw (take len input)
-
-{-
--- | Scan a string until EOF is encountered.
-alexScanTokens :: String -> Either String [Keyword]
-alexScanTokens inp = runAlex inp gather
-  where
-  gather = do
-    t <- alexMonadScan
-    case trace (show t) t of
-      EOF -> return [EOF]
-      _   -> (t:) `liftM` gather
-
--- | Scan a file.
-scanFile f = do
-   inp <- readFile f
-   return $ alexScanTokens inp
--}
-
--- | Formal text types.
-data TextType =
-       TextBegin String
-     | TextContent String
-     | TextEnd
-     deriving( Eq, Ord, Show )
-
--- | Lexable Keywords
-data Keyword =
-    IDENT String
-  | TEXT TextType
-  | SQUOTE
-  | DQUOTE
-  | RIGHTARROW
-  | LEFTARROW
-  | LONGRIGHTARROW
-  | LONGLEFTARROW
-  | COMMA
-  | DOT
-  | COLON
-  | QUESTIONMARK
-  | BANG
-  | AND
-  | MID
-  | DOLLAR
-  | AT
-  | SHARP
-  | LPAREN
-  | RPAREN
-  | LBRACKET
-  | RBRACKET
-  | LBRACE
-  | RBRACE
-  | SLASH
-  | BACKSLASH
-  | TILDE
-  | HAT
-  | STAR
-  | UNDERSCORE
-  | MINUS
-  | PLUS
-  | EQUAL
-  | LESS
-  | GREATER
-  | EOF
-  | FORALL
-  | EXISTS
-  | LAND
-  | LOR
-  | LNOT
-  | APPROX
-  -- dummy keyword to get rid of overlapping pattern matches
-  | DUMMY_KEYWORD
-  deriving( Eq )
-
-instance Show Keyword where
-  show kw = case kw of
-      IDENT i -> identifier i
-      TEXT t -> txt t
-      SQUOTE -> symbol "'"
-      DQUOTE -> symbol "\""
-      RIGHTARROW -> symbol "->"
-      LEFTARROW -> symbol "<-"
-      LONGRIGHTARROW -> symbol "-->"
-      LONGLEFTARROW -> symbol "<--"
-      COMMA -> symbol ","
-      DOT -> symbol "."
-      COLON -> symbol ":"
-      QUESTIONMARK -> symbol "?"
-      BANG -> symbol "!"
-      AND -> symbol "&"
-      MID -> symbol "|"
-      DOLLAR -> symbol "$"
-      AT -> symbol "@"
-      SHARP -> symbol "#"
-      LPAREN -> symbol "("
-      RPAREN -> symbol ")"
-      LBRACKET -> symbol "["
-      RBRACKET -> symbol "]"
-      LBRACE  -> symbol "{"
-      RBRACE -> symbol "}"
-      SLASH -> symbol "/"
-      BACKSLASH -> symbol "\\"
-      TILDE -> symbol "~"
-      HAT -> symbol "^"
-      STAR -> symbol "*"
-      UNDERSCORE -> symbol "_"
-      MINUS -> symbol "-"
-      PLUS -> symbol "+"
-      EQUAL -> symbol "="
-      LESS -> symbol "<"
-      GREATER -> symbol ">"
-      EOF -> "end of file"
-      FORALL -> symbol   "∀"
-      EXISTS -> symbol   "∃"
-      LAND -> symbol     "∧"
-      LOR -> symbol      "∨"
-      LNOT -> symbol     "¬"
-      APPROX -> symbol   "≈"
-      DUMMY_KEYWORD -> "DUMMY_KEYWORD (this should not occur!)"
-    where
-      identifier i        = "identifier `" ++ i ++ "'"
-      txt (TextBegin t)   = "start of `" ++ t ++ "'"
-      txt (TextContent t) = "text `" ++ t ++ "'"
-      txt (TextEnd)       = "start of text"
-      symbol s            = "symbol `" ++ s ++ "'"
-      keyword s           = "keyword `" ++ s ++ "'"
-
--- -----------------------------------------------------------------------------
--- Alex wrapper code.
---
--- This code is in the PUBLIC DOMAIN; you may copy it freely and use
--- it for any purpose whatsoever.
-
--- -----------------------------------------------------------------------------
--- The input type
-
-type AlexInput = (AlexPosn,     -- current position,
-                  Char,         -- previous char
-                  [Word8],      -- remaining bytes of current char
-                  String)       -- current input string
-
-alexInputPrevChar :: AlexInput -> Char
-alexInputPrevChar (p,c,bs,s) = c
-
-alexGetByte :: AlexInput -> Maybe (Word8,AlexInput)
-alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))
-alexGetByte (p,c,[],[]) = Nothing
-alexGetByte (p,_,[],(c:s))  = let p' = alexMove p c
-                                  (b:bs) = UTF8.encodeChar c
-                              in p' `seq`  Just (b, (p', c, bs, s))
-
--- -----------------------------------------------------------------------------
--- Token positions
-
--- `Posn' records the location of a token in the input text.  It has three
--- fields: the address (number of chacaters preceding the token), line number
--- and column of a token within the file. `start_pos' gives the position of the
--- start of the file and `eof_pos' a standard encoding for the end of file.
--- `move_pos' calculates the new position after traversing a given character,
--- assuming the usual eight character tab stops.
-
-data AlexPosn = AlexPn !Int !Int !Int
-        deriving (Eq)
-
-instance Show AlexPosn where
-  show (AlexPn _ l c) = "line "++show l++" column "++show c
-
-alexStartPos :: AlexPosn
-alexStartPos = AlexPn 0 1 1
-
-alexMove :: AlexPosn -> Char -> AlexPosn
-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)
-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1
-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)
-
-
--- -----------------------------------------------------------------------------
--- Default monad
-
-
-data AlexState = AlexState {
-        alex_pos :: !AlexPosn,  -- position at current input location
-        alex_inp :: String,     -- the current input
-        alex_chr :: !Char,      -- the character before the input
-        alex_scd :: !Int,       -- the current startcode
-        alex_ocd :: !Int,       -- the old startcode before the comment started
-        alex_cmt :: [String]    -- stack of begin comment identifiers
-    }
-
--- Compile with -funbox-strict-fields for best results!
-
-runAlex :: String -> Alex a -> Either String a
-runAlex input (Alex f)
-   = case f (AlexState {alex_pos = alexStartPos,
-                        alex_inp = input,
-                        alex_chr = '\n',
-                        alex_scd = 0,
-                        alex_ocd = 0,
-                        alex_cmt = []
-             }) of
-       Left msg -> Left msg
-       Right ( _, a ) -> Right a
-
-newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }
-
-instance Functor Alex where
-  fmap = liftM
-
-instance Applicative Alex where
-  pure  = return
-  (<*>) = ap
-
-instance Monad Alex where
-  m >>= k  = Alex $ \s -> case unAlex m s of
-                                Left msg -> Left msg
-                                Right (s',a) -> unAlex (k a) s'
-  return a = Alex $ \s -> Right (s,a)
-
-alexGetPos :: Alex AlexPosn
-alexGetPos = Alex $ \s@AlexState{alex_pos=pos} -> Right (s, pos)
-
-alexGetInput :: Alex AlexInput
-alexGetInput
- = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_inp=inp} ->
-        Right (s, (pos,c,[],inp))
-
-alexSetInput :: AlexInput -> Alex ()
-alexSetInput (pos,c,_,inp)
- = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_inp=inp} of
-                  s@(AlexState{}) -> Right (s, ())
-
-alexError :: String -> Alex a
-alexError message = Alex $ \s -> Left $ message ++ " in " ++ show (alex_pos s)
-
-alexGetStartCode :: Alex Int
-alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)
-
-alexSetStartCode :: Int -> Alex ()
-alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())
-
-alexGetOldStartCode :: Alex Int
-alexGetOldStartCode = Alex $ \s@AlexState{alex_ocd=sc} -> Right (s, sc)
-
-alexSetOldStartCode :: Int -> Alex ()
-alexSetOldStartCode sc = Alex $ \s -> Right (s{alex_ocd=sc}, ())
-
-alexGetComments :: Alex [String]
-alexGetComments = Alex $ \s -> Right (s, alex_cmt s)
-
-alexSetComments :: [String] -> Alex ()
-alexSetComments cmt = Alex $ \s -> Right (s{alex_cmt=cmt}, ())
-
-alexMonadScan = do
-  inp <- alexGetInput
-  sc <- alexGetStartCode
-  case alexScan inp sc of
-    AlexEOF -> alexEOF
-    AlexError inp' -> alexError "lexical error"
-    AlexSkip  inp' len -> do
-        alexSetInput inp'
-        alexMonadScan
-    AlexToken inp' len action -> do
-        alexSetInput inp'
-        action inp len
-
--- -----------------------------------------------------------------------------
--- Useful token actions
-
-type AlexAction result = AlexInput -> Int -> Alex result
-
--- just ignore this token and scan another one
-skip :: AlexAction Keyword
-skip input len = alexMonadScan
-
--- ignore this token, but set the start code to a new value
-begin :: Int -> AlexAction Keyword
-begin code input len = do alexSetStartCode code; alexMonadScan
-
--- | Begin a text starting of the given type.
-beginText :: String -> Int -> AlexAction Keyword
-beginText ty code _ _ = do
-  alexSetStartCode code
-  return $ TEXT $ TextBegin ty
-
--- | End a text.
-endText :: Int -> AlexAction Keyword
-endText code _ _ = do
-  alexSetStartCode code
-  return $ TEXT TextEnd
-
--- | Begin a comment starting with the given sign.
-beginComment :: String -> Int -> AlexAction Keyword
-beginComment cmtBegin code input len = do
-  cmts <- alexGetComments
-  alexSetComments $ cmtBegin : cmts
-  if null cmts
-    then alexGetStartCode >>= alexSetOldStartCode
-    else return ()
-  alexSetStartCode code
-  alexMonadScan
-
--- | End a comment that started with the given begin comment sign.
-endComment :: String -> AlexAction Keyword
-endComment cmtBegin input len = do
-  cmts <- alexGetComments
-  case cmts of
-    [] -> alexError $ "comment ended but no beginning '"++cmtBegin++"' marked."
-    (cmt:cmts') -> do
-      if cmt == cmtBegin
-        then do
-          alexSetComments cmts'
-          if null cmts'
-            then alexGetOldStartCode >>= alexSetStartCode
-            else return ()
-        else return ()
-      alexMonadScan
-
--- perform an action for this token, and set the start code to a new value
--- andBegin :: AlexAction result -> Int -> AlexAction result
-(action `andBegin` code) input len = do alexSetStartCode code; action input len
-
-alexEOF :: Alex Keyword
-alexEOF = return EOF
-
-
-
-
-
-comment,text :: Int
-comment = 1
-text = 2
-alex_action_2 =  beginComment "(*" comment 
-alex_action_3 =  beginComment "(*" comment 
-alex_action_4 =  beginComment "(*" comment 
-alex_action_5 =  endComment "(*" 
-alex_action_6 =  beginComment "/*" comment 
-alex_action_7 =  beginComment "/*" comment 
-alex_action_8 =  beginComment "/*" comment 
-alex_action_9 =  endComment "/*" 
-alex_action_10 =  skip 
-alex_action_11 =  beginText "text" text 
-alex_action_12 =  beginText "section" text 
-alex_action_13 =  beginText "subsection" text 
-alex_action_14 =  endText 0
-alex_action_15 =  scanString (TEXT . TextContent) 
-alex_action_16 =  keyword FORALL 
-alex_action_17 =  keyword EXISTS 
-alex_action_18 =  keyword LAND 
-alex_action_19 =  keyword LOR 
-alex_action_20 =  keyword LNOT 
-alex_action_21 =  keyword APPROX 
-alex_action_22 =  keyword COMMA 
-alex_action_23 =  keyword LPAREN 
-alex_action_24 =  keyword RPAREN 
-alex_action_25 =  keyword LBRACKET 
-alex_action_26 =  keyword RBRACKET 
-alex_action_27 =  keyword LBRACE 
-alex_action_28 =  keyword RBRACE 
-alex_action_29 =  keyword SLASH 
-alex_action_30 =  keyword BACKSLASH 
-alex_action_31 =  keyword SQUOTE 
-alex_action_32 =  keyword DQUOTE 
-alex_action_33 =  keyword TILDE 
-alex_action_34 =  keyword HAT 
-alex_action_35 =  keyword EQUAL 
-alex_action_36 =  keyword COLON 
-alex_action_37 =  keyword DOLLAR 
-alex_action_38 =  keyword AT 
-alex_action_39 =  keyword SHARP 
-alex_action_40 =  keyword STAR 
-alex_action_41 =  keyword LESS 
-alex_action_42 =  keyword GREATER 
-alex_action_43 =  keyword QUESTIONMARK 
-alex_action_44 =  keyword BANG 
-alex_action_45 =  keyword AND 
-alex_action_46 =  keyword MID 
-alex_action_47 =  keyword DOT 
-alex_action_48 =  keyword UNDERSCORE 
-alex_action_49 =  keyword MINUS 
-alex_action_50 =  keyword PLUS 
-alex_action_51 =  keyword RIGHTARROW 
-alex_action_52 =  keyword LEFTARROW 
-alex_action_53 =  keyword LONGRIGHTARROW 
-alex_action_54 =  keyword LONGLEFTARROW 
-alex_action_55 =  scanString IDENT
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
--- -----------------------------------------------------------------------------
--- ALEX TEMPLATE
---
--- This code is in the PUBLIC DOMAIN; you may copy it freely and use
--- it for any purpose whatsoever.
-
--- -----------------------------------------------------------------------------
--- INTERNALS and main scanner engine
-
-
-
-
-
-
-
--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
-#if __GLASGOW_HASKELL__ > 706
-#define GTE(n,m) (tagToEnum# (n >=# m))
-#define EQ(n,m) (tagToEnum# (n ==# m))
-#else
-#define GTE(n,m) (n >=# m)
-#define EQ(n,m) (n ==# m)
-#endif
-
-
-
-data AlexAddr = AlexA# Addr#
--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
-#if __GLASGOW_HASKELL__ < 503
-uncheckedShiftL# = shiftL#
-#endif
-
-{-# INLINE alexIndexInt16OffAddr #-}
-alexIndexInt16OffAddr (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 alexGetByte 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 alexGetByte input of
-     Nothing -> (new_acc, input)
-     Just (c, new_input) -> 
-
-
-
-      case fromIntegral c of { (I# (ord_c)) ->
-        let
-                base   = alexIndexInt32OffAddr alex_base s
-                offset = (base +# ord_c)
-                check  = alexIndexInt16OffAddr alex_check offset
-		
-                new_s = if GTE(offset,0#) && EQ(check,ord_c)
-			  then alexIndexInt16OffAddr alex_table offset
-			  else alexIndexInt16OffAddr alex_deflt s
-	in
-        case new_s of
-	    -1# -> (new_acc, input)
-		-- on an error, we want to keep the input *before* the
-		-- character that failed, not after.
-    	    _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
-			new_input new_s new_acc
-      }
-  where
-	check_accs (AlexAccNone) = last_acc
-	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len))
-	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))
-
-
-data AlexLastAcc a
-  = AlexNone
-  | AlexLastAcc a !AlexInput !Int
-  | AlexLastSkip  !AlexInput !Int
-
-instance Functor AlexLastAcc where
-    fmap f AlexNone = AlexNone
-    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z
-    fmap f (AlexLastSkip x y) = AlexLastSkip x y
-
-data AlexAcc a user
-  = AlexAccNone
-  | AlexAcc a
-  | AlexAccSkip
-
-
--- used by wrappers
-iUnbox (I# (i)) = i
-
diff --git a/scyther-proof.cabal b/scyther-proof.cabal
--- a/scyther-proof.cabal
+++ b/scyther-proof.cabal
@@ -1,6 +1,6 @@
 build-type:         Simple
 name:               scyther-proof
-version:            0.10.0.0
+version:            0.10.0.1
 license:            GPL
 license-file:       LICENSE
 category:           Security, Theorem Provers
@@ -114,15 +114,15 @@
         mtl           >= 2.1   && < 3.0,
 
         cmdargs       >= 0.10.7 ,
-        filepath      >= 1.2   && < 1.4 ,
+        filepath      >= 1.2   && < 1.5 ,
         directory     >= 1.0   && < 1.3 ,
         process       >= 1.1   && < 1.3 ,
-        time          >= 1.1   && < 1.5 ,
+        time          >= 1.1   && < 1.6 ,
 
         parsec        == 3.1.*  ,
         pretty        >= 1.0   && < 1.2 ,
         tagsoup       >= 0.12  && < 0.14 ,
-        json          == 0.5.*  ,
+        json          >= 0.5   && < 0.10 ,
         uniplate      == 1.6.* ,
         utf8-string   >= 0.3.7
 
diff --git a/src/Control/Concurrent/ManagedThreads.hs b/src/Control/Concurrent/ManagedThreads.hs
--- a/src/Control/Concurrent/ManagedThreads.hs
+++ b/src/Control/Concurrent/ManagedThreads.hs
@@ -1,4 +1,4 @@
--- NOTE: The first part of this module is based on Chapter 24 from 
+-- NOTE: The first part of this module is based on Chapter 24 from
 -- "Real World Haskell Programming" cf:
 -- (http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html)
 
@@ -87,7 +87,7 @@
 
 -- | Extract the head of the list in the MVar if possible.
 takeHead :: MVar [a] -> IO (Maybe a)
-takeHead v = 
+takeHead v =
     modifyMVar v (return . extract)
   where
     extract []     = ([], Nothing)
@@ -95,7 +95,7 @@
 
 -- | Do a parallel sequencing of a list of IO commands using n worker threads
 -- and gather their results in a list again.
-nParSequenceIO :: Int -> [IO a] -> IO [a] 
+nParSequenceIO :: Int -> [IO a] -> IO [a]
 nParSequenceIO n ios = do
     inMv <- newMVar $ zip [(1::Int)..] ios
     resMv <- newMVar []
@@ -150,7 +150,7 @@
     waitAll mgr
   where
     nCmds = length cmds
-    displayThread ch i 
+    displayThread ch i
       | nCmds < i = do return ()
       | otherwise = do msg <- readChan ch
                        display nCmds i msg
@@ -158,7 +158,7 @@
 
 -- | Like @nParCmd_@ but uses the number of processing cores+1 as a default for
 -- the number of worker treads. You can change their number by adding to the
--- command line of a program linked with the threaded library: 
+-- command line of a program linked with the threaded library:
 --    +RTS -N<no-of-cores> -RTS
 parCmd_ :: (Int -> Int -> b -> IO ()) -> [Chan b -> IO a] -> IO ()
 parCmd_ display cmds = nParCmd_ (numCapabilities+1) display cmds
diff --git a/src/Control/Monad/BoundedDFS.hs b/src/Control/Monad/BoundedDFS.hs
--- a/src/Control/Monad/BoundedDFS.hs
+++ b/src/Control/Monad/BoundedDFS.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, 
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts,
              FunctionalDependencies, GeneralizedNewtypeDeriving #-}
 -- | A monad for implemented bounded depth-first-search and branch-and-bound
 -- search.
@@ -6,7 +6,7 @@
   -- * Costful operations
     MonadCost(..)
 
-  -- * Unbounded depth-first-search 
+  -- * Unbounded depth-first-search
   , UnboundedDFS(..)
 
   -- * Bounded depth-first-search
@@ -91,16 +91,16 @@
 execBoundedDFS m cond = fmap snd . runBoundedDFS m cond
 
 -- | A branch and bound monad for finding results with the smallest costs.
-newtype BranchAndBound c a = 
-  BranchAndBound { 
-    unBranchAndBound :: ReaderT (c -> Bool) (StateT c Maybe) a 
+newtype BranchAndBound c a =
+  BranchAndBound {
+    unBranchAndBound :: ReaderT (c -> Bool) (StateT c Maybe) a
   }
   deriving( Functor, Applicative, Monad )
 
 -- | Run a branch and bound search.
 runBranchAndBound :: Cost c => BranchAndBound c a -> c -> Maybe (a, c)
-runBranchAndBound m bound 
-  | zeroCost `lessEqCost` bound = 
+runBranchAndBound m bound
+  | zeroCost `lessEqCost` bound =
       runStateT (runReaderT (unBranchAndBound m) (`lessEqCost` bound)) zeroCost
   | otherwise = mzero
 
@@ -148,7 +148,7 @@
 
 instance Cost c => MonadPlus (BranchAndBound c) where
   mzero = BranchAndBound $ mzero
-  m1 `mplus` m2 = BranchAndBound $ 
+  m1 `mplus` m2 = BranchAndBound $
     (do -- see if m1 get's through
         used <- get
         x1 <- unBranchAndBound m1
diff --git a/src/Control/Monad/Label.hs b/src/Control/Monad/Label.hs
--- a/src/Control/Monad/Label.hs
+++ b/src/Control/Monad/Label.hs
@@ -82,7 +82,7 @@
 
 -- | Execute a computation requiring consistent labels.
 execConsistentLabels :: ConsistentLabels k l a -> [l] -> ([l], M.Map k l)
-execConsistentLabels m = snd . runConsistentLabels m 
+execConsistentLabels m = snd . runConsistentLabels m
 
 
 
diff --git a/src/Data/Color.hs b/src/Data/Color.hs
--- a/src/Data/Color.hs
+++ b/src/Data/Color.hs
@@ -13,7 +13,7 @@
   , red
   , green
   , blue
-  
+
   -- ** Conversions
   , rgbToGray
   , hsvToGray
@@ -85,7 +85,7 @@
      | ub == g   = 60 * (2 + (b-r)/(ub-lb))
      | otherwise = 60 * (4 + (r-g)/(ub-lb))
 
-  h' | h < 0 = h + 360 
+  h' | h < 0 = h + 360
      | otherwise = h
 
   s  | ub == 0   = 0
@@ -126,9 +126,9 @@
 rgbToHex :: RealFrac t => RGB t -> String
 rgbToHex (RGB r g b) = ('#':) . showHex' r . showHex' g . showHex' b $ ""
   where showHex' f
-	  | i <= 15   = ('0':) . showHex i
-	  | otherwise = showHex i
-	  where 
+          | i <= 15   = ('0':) . showHex i
+          | otherwise = showHex i
+          where
           i :: Int
           i = max 0 (min 255 (floor (256 * f)))
 
@@ -155,23 +155,23 @@
 -- | From a list of group sizes build a function assigning every element a
 -- unique color, nicely distributed such that they are well differentiated both
 -- using color and monochrome displays.
-genColorGroups :: RealFrac t => 
-                  ColorParams t 
+genColorGroups :: RealFrac t =>
+                  ColorParams t
                -> [Int]                -- ^ List of group sizes.
                -> [((Int,Int),(HSV t))]
-genColorGroups (ColorParams { 
-	      cpScale = scale 
-	    , cpZeroHue = zeroHue 
-	    , cpVBottom = vBot, cpVRange = vRan
-	    , cpSBottom = sBot, cpSRange = sRan
-	    }) groups = 
+genColorGroups (ColorParams {
+              cpScale = scale
+            , cpZeroHue = zeroHue
+            , cpVBottom = vBot, cpVRange = vRan
+            , cpSBottom = sBot, cpSRange = sRan
+            }) groups =
   do
     (groupIdx, groupSize) <- zip [0.. ] groups
     elemIdx <- [0..groupSize - 1]
     let h = toShiftedGroupHue groupIdx (fromIntegral elemIdx / fromIntegral groupSize)
         v = vBot + vRan * toGroupHue groupIdx (fromIntegral elemIdx / fromIntegral groupSize)
         s = sBot + sRan * toGroupHue groupIdx (fromIntegral elemIdx / fromIntegral groupSize)
-        color = HSV (360*h) s v 
+        color = HSV (360*h) s v
     return ((groupIdx, elemIdx), color)
   where
     nGroups :: Int
@@ -182,9 +182,9 @@
       0.5 * (1 - scale) + -- left margin
             (h * scale)   -- position in margin
       ) / (fromIntegral nGroups)
-   
+
     toShiftedGroupHue g h =
-      snd . properFraction $ toGroupHue g h + 1 + 
+      snd . properFraction $ toGroupHue g h + 1 +
       (zeroHue/360) - toGroupHue 0 0.5
 
 
@@ -228,7 +228,7 @@
 {-
 
 colorTable :: Double -> (HSV Double -> HSV Double) -> [Int] -> Html
-colorTable zeroHue conv groups = 
+colorTable zeroHue conv groups =
   table . toHtml . besides $ map col [0..length groups-1]
   where
   col i = aboves [cell $ (td ! [getStyle i j]) (stringToHtml (show (i,j)))
diff --git a/src/Data/DAG/Simple.hs b/src/Data/DAG/Simple.hs
--- a/src/Data/DAG/Simple.hs
+++ b/src/Data/DAG/Simple.hs
@@ -17,10 +17,10 @@
 -- cyclic, then the result is at least some permutation of all elements of
 -- the given relation.
 toposort :: Ord a => [(a, a)] -> [a]
-toposort dag = 
+toposort dag =
     execWriter . foldM visit S.empty $ map fst dag ++ map snd dag
-  where 
-    visit visited x 
+  where
+    visit visited x
       | x `S.member` visited = return visited
       | otherwise            =
           foldM visit (S.insert x visited) preds <* tell (pure x)
@@ -30,10 +30,10 @@
 
 -- | Compute the set of nodes reachable from the given set of nodes.
 reachableSet :: Ord a => [a] -> [(a,a)] -> S.Set a
-reachableSet start dag = 
+reachableSet start dag =
     foldl' visit S.empty start
-  where 
-    visit visited x 
+  where
+    visit visited x
       | x `S.member` visited = visited
       | otherwise            =
           foldl' visit (S.insert x visited) succs
@@ -42,17 +42,17 @@
 
 -- | Is the relation cyclic.
 cyclic :: Ord a => [(a,a)] -> Bool
-cyclic rel = 
+cyclic rel =
     maybe True (const False) $ foldM visitForest S.empty $ map fst rel
-  where 
+  where
     visitForest visited x
       | x `S.member` visited = return visited
       | otherwise            = findLoop S.empty visited x
 
-    findLoop parents visited x 
+    findLoop parents visited x
       | x `S.member` parents = mzero
       | x `S.member` visited = return visited
-      | otherwise            = 
+      | otherwise            =
           S.insert x <$> foldM (findLoop parents') visited next
       where
         next     = [ e' | (e,e') <- rel, e == x ]
diff --git a/src/Data/Table.hs b/src/Data/Table.hs
--- a/src/Data/Table.hs
+++ b/src/Data/Table.hs
@@ -40,11 +40,11 @@
 ------------------------------------------------------------------------------
 
 -- | Round a number to the given amount of decimals.
-roundDecimal :: RealFrac a 
+roundDecimal :: RealFrac a
              => Int  -- ^ Number of decimals after the decimal point
              -> a -> a
 roundDecimal d n = fromIntegral ((round (multiplier * n))::Integer) / multiplier
-  where 
+  where
   multiplier :: RealFrac a => a
   multiplier = 10 ^^ d
 
@@ -72,7 +72,7 @@
 
 -- | Convert a dense list to an 'IntMap' assuming the list has consecutive
 -- indexes starting from '0'.
-fromDenseList :: [a] -> IM.IntMap a 
+fromDenseList :: [a] -> IM.IntMap a
 fromDenseList = IM.fromList . zip [0..]
 
 ------------------------------------------------------------------------------
@@ -86,7 +86,7 @@
   deriving( Eq, Ord, Show )
 
 -- | A table with aligned rows.
-data Table a = Table { 
+data Table a = Table {
     alignments :: IM.IntMap Alignment  -- ^ The alignment for each column
   , headers    :: IM.IntMap a          -- ^ The headers for each column
   , getCells   :: Cells a              -- ^ Cells indexed first by rows then by columns
@@ -115,7 +115,7 @@
 -- | Retrieve the contents of a cell if it exists.
 getCell :: (Int,Int) -> Table a -> Maybe a
 getCell (rowIdx, colIdx) = (IM.lookup colIdx =<<) . IM.lookup rowIdx . getCells
-  
+
 -- | View the index and the contents of the last cell.
 viewLastCell :: Table a -> Maybe ((Int, Int), a)
 viewLastCell t = do
@@ -150,10 +150,10 @@
 mapCells f = mapCellsAndHeaders f id
 
 -- | Updtate the headers and the cells
-mapCellsAndHeaders :: (Cells a -> Cells b) 
-                   -> (IM.IntMap a -> IM.IntMap b) 
+mapCellsAndHeaders :: (Cells a -> Cells b)
+                   -> (IM.IntMap a -> IM.IntMap b)
                    -> Table a -> Table b
-mapCellsAndHeaders fCells fHeaders t = 
+mapCellsAndHeaders fCells fHeaders t =
   t { headers = fHeaders (headers t), getCells = fCells (getCells t) }
 
 
@@ -178,7 +178,7 @@
 
 -- | Set the contents of a cell.
 setCell :: (Int,Int) -> a -> Table a -> Table a
-setCell idx@(rowIdx, colIdx) x 
+setCell idx@(rowIdx, colIdx) x
   | rowIdx < 0 || colIdx < 0 = error $ "setCell: index out of range" ++ show idx
   | otherwise                = mapCells (IM.alter changeRow rowIdx)
   where
@@ -191,9 +191,9 @@
   Just rowIdx -> IM.insert (succ rowIdx) IM.empty cells
   Nothing     -> IM.singleton 0 IM.empty
 
--- | Append a cell at the end of the last row 
+-- | Append a cell at the end of the last row
 appendCell :: a -> Table a -> Table a
-appendCell cell = mapCells $ \cells -> 
+appendCell cell = mapCells $ \cells ->
   case IM.maxViewWithKey cells of
     Just ((rowIdx,row),cellsNoRow) ->
       case maxKey row of
@@ -216,7 +216,7 @@
 appendNumCell :: (Show a, RealFrac a )
               => Int -- ^ Number of digits after the decimal point
               -> a -> Table String -> Table String
-appendNumCell dec x = 
+appendNumCell dec x =
   alignLastCell AlignRight . appendCell (show $ roundDecimal dec x)
 
 
@@ -237,12 +237,12 @@
 
 -- | Align the contents of each cell using the given aligment for each row.
 alignCellsBy :: [Aligner a] -> [[[a]]] -> [[[a]]]
-alignCellsBy expanders = 
+alignCellsBy expanders =
   transpose . zipWith alignBy (cycle expanders) . transpose . alignBy (flushLeftBy [[]])
 
 -- | Convert a table to the body of a LaTeX table.
 toLaTeX :: (a -> String) -> Table a -> String
-toLaTeX toStr t = 
+toLaTeX toStr t =
   formatLines . map formatLine . alignCells . addHeaders . toList "" . fmap toStr $ t
   where
   addHeaders
@@ -264,5 +264,5 @@
 test = fromList $ [["simon","where","a"],["new","","world"],[],["order"]]
 test1 = setHeader 1 "URGH" .setHeader 1 "WORDL" . appendNumCell 2 10.2 . alignLastCell AlignRight . appendCell "w" $ test
 
-latex = putStrLn . toLaTeX id 
+latex = putStrLn . toLaTeX id
 -}
diff --git a/src/Data/UnionFind.hs b/src/Data/UnionFind.hs
--- a/src/Data/UnionFind.hs
+++ b/src/Data/UnionFind.hs
@@ -6,14 +6,14 @@
   , map
   , empty
   , size
-  , equate 
-  , fromList 
+  , equate
+  , fromList
   , equateList
   , toList
   , union
-  , find 
-  , findWithDefault 
-  , equiv 
+  , find
+  , findWithDefault
+  , equiv
   ) where
 
 import Prelude hiding (map)
@@ -71,18 +71,18 @@
 
 -- | @equate x y uf@ inserts the equality @x = y@ into @uf@.
 equate :: Ord a => a -> a -> UnionFind a -> UnionFind a
-equate x y (UnionFind uf) 
+equate x y (UnionFind uf)
   | x == y    = UnionFind uf
-  | otherwise = UnionFind $ 
+  | otherwise = UnionFind $
       case (M.lookup x uf, M.lookup y uf) of
          (Nothing, Nothing)
            | x <= y    -> M.insert y x uf
            | otherwise -> M.insert x y uf
-         
+
          (Just xr, Nothing)
            | xr <= x   -> M.insert y xr uf
            | otherwise -> M.insert y x $ update xr x uf
-         
+
          (Nothing, Just yr)
            | yr <= y   -> M.insert x yr uf
            | otherwise -> M.insert x y $ update yr y uf
@@ -96,7 +96,7 @@
         upd rep | rep == old_rep = new_rep
                 | otherwise      = rep
 
-fromList :: Ord a => [(a,a)] -> UnionFind a 
+fromList :: Ord a => [(a,a)] -> UnionFind a
 fromList = equateList empty
 
 equateList :: Ord a => UnionFind a -> [(a,a)] -> UnionFind a
@@ -106,7 +106,7 @@
 toList = M.toList . unUnionFind
 
 union :: Ord a => UnionFind a -> UnionFind a -> UnionFind a
-union uf1 uf2 
+union uf1 uf2
   | size uf1 < size uf2 = equateList uf2 $ toList uf1
   | otherwise           = equateList uf1 $ toList uf2
 
diff --git a/src/Extension/Prelude.hs b/src/Extension/Prelude.hs
--- a/src/Extension/Prelude.hs
+++ b/src/Extension/Prelude.hs
@@ -1,6 +1,59 @@
+{-# LANGUAGE CPP #-}
 -- Functions that could/should have made it into the Prelude or one of the base libraries
-module Extension.Prelude where
+module Extension.Prelude
+  (
+  -- * Bool
+    implies
 
+  -- *  Lists
+  , singleton
+  , unique
+  , sortednub
+  , sortednubOn
+  , nubOn
+  , groupOn
+  , sortOn
+  , sortOnMemo
+  , groupSortOn
+  , eqClasses
+  , eqClassesBy
+  , splitBy
+  , choose
+  , leaveOneOut
+  , keepFirst
+
+  -- *  Pairs
+  , swap
+  , sortPair
+
+  -- *  Either
+  , isRight
+  , isLeft
+
+  -- *  Strings
+  , Named
+  , flushRightBy
+  , flushRight
+  , flushLeftBy
+  , flushLeft
+
+  -- *  IO
+  , warning
+  , putErr
+  , putErrLn
+
+  -- *  Applicative
+  , oneOfList
+  , oneOfSet
+  , oneOfMap
+
+  -- *  Monads
+  , ifM
+  , errorFree
+  , errorFree1
+
+  ) where
+
 import Data.Maybe
 import Data.List
 import qualified Data.Set as S
@@ -39,7 +92,7 @@
 sortednub = map head . group . sort
 
 -- | //O(n*log n).// Sort list and remove duplicates with respect to a
--- projection. 
+-- projection.
 sortednubOn :: Ord b => (a -> b) -> [a] -> [a]
 sortednubOn proj = map head . groupOn proj . sortOn proj
 
@@ -51,9 +104,13 @@
 groupOn :: Eq b => (a -> b) -> [a] -> [[a]]
 groupOn proj = groupBy ((==) `on` proj)
 
+#if MIN_VERSION_base(4,8,0)
+-- 'sortOn' is included in base >= 4.8.0
+#else
 -- | sort on a projection of the data to sort
 sortOn :: Ord b => (a -> b) -> [a] -> [a]
 sortOn proj = sortBy (comparing proj)
+#endif
 
 -- | sort on a projection of the data to sort, memorizing the results of the
 -- projection in order to avoid recomputation.
@@ -82,8 +139,8 @@
 splitBy p = unfoldr split
   where split [] = Nothing
         split xs = let ~(w,r) = break p xs in case r of
-	  []       -> Just $ (w,[])
-	  (_:rest) -> Just $ (w,rest)
+          []       -> Just $ (w,[])
+          (_:rest) -> Just $ (w,rest)
 
 
 -- | the list of all permutations of a given list
@@ -93,17 +150,17 @@
   -- where aux [] _ = []
         -- aux (x:xs) ys = [x:p | p <- permutations (xs++ys)] ++ aux xs (x:ys)
 
--- | the list of all combinations of n elements of a list. 
+-- | the list of all combinations of n elements of a list.
 -- E.g. choose 2 [1,2,3] = [[1,2],[1,3],[2,3]]
 choose :: Int -> [a] -> [[a]]
 choose 0 _      = [[]]
 choose _ []     = []
 choose n (x:xs) = [x:xs' | xs' <- choose (n-1) xs] ++ choose n xs
 
--- | build the list of lists each leaving another element out. 
+-- | build the list of lists each leaving another element out.
 -- (From left to right)
 leaveOneOut :: [a] -> [[a]]
-leaveOneOut xs = 
+leaveOneOut xs =
   zipWith (++) (map init . tail . inits $ xs) (map tail . init . tails $ xs)
 
 
@@ -116,12 +173,12 @@
 -- Pairs --
 -----------
 
--- | These functions were inspired by the ML library accompanying the 
+-- | These functions were inspired by the ML library accompanying the
 --   Isabelle theorem prover (<http://isabelle.in.tum.de/>)
 
 -- | swap the elements of a pair
 swap :: (a, b) -> (b, a)
-swap (x, y)	 = (y, x)
+swap (x, y)      = (y, x)
 
 -- | sort the elements of a pair
 sortPair :: Ord a => (a,a) -> (a,a)
@@ -205,7 +262,7 @@
 
 -- | Gather all error free computations.
 errorFree :: MonadPlus m => [m a] -> m [a]
-errorFree ms = 
+errorFree ms =
   catMaybes `liftM` sequence [(Just `liftM` m) `mplus` return Nothing | m <- ms]
 
 -- | Gather all error free computations and ensure that at least one was error
diff --git a/src/Scyther/Equalities.hs b/src/Scyther/Equalities.hs
--- a/src/Scyther/Equalities.hs
+++ b/src/Scyther/Equalities.hs
@@ -89,7 +89,7 @@
 -- Equalities
 ------------------------------------------------------------------------------
 
--- | Equalities over thread identifers. 
+-- | Equalities over thread identifers.
 --
 -- Logically these are equalities between logical thread identifier variables.
 type TIDEq   = (TID, TID)
@@ -109,7 +109,7 @@
 -- equalities.
 type ArbMsgEqs = M.Map ArbMsgId Message
 
--- | Equalities between different agent variables. 
+-- | Equalities between different agent variables.
 --
 -- We do not have to reason about equalities between an agent variable and some
 -- other message because our semantics guarantees that agent variables are only
@@ -125,10 +125,10 @@
 
 -- | Equalities between messages.
 type MsgEq  = (Message, Message)
-type MsgEqs = U.UnionFind Message 
+type MsgEqs = U.UnionFind Message
 
 -- | Some representable equality.
-data AnyEq = 
+data AnyEq =
     TIDEq     !TIDEq
   | TIDRoleEq !TIDRoleEq
   | RoleEq    !RoleEq
@@ -151,11 +151,11 @@
 --
 --        forall tid : ran(tideqs).     substTID eqs tid = tid
 --        forall tid : dom(roleeqs).    substTID eqs tid = tid
---        forall (lid, lid') : avareqs. substLocalId eqs lid = lid 
+--        forall (lid, lid') : avareqs. substLocalId eqs lid = lid
 --                                    & substAVar eqs lid' = lid'
---        forall (lid, m)    : mvareqs. substLocalId eqs lid = lid 
+--        forall (lid, m)    : mvareqs. substLocalId eqs lid = lid
 --                                    & substMsg eqs m = m
---        
+--
 --     TODO: Complete properties for Agent ID's
 --
 --        forall aid : dom(arbmeqs).    substAMID eqs aid = MArbMsg aid
@@ -240,8 +240,8 @@
     go (MTup m1 m2)   = MTup (go m1) (go m2)
     go (MEnc m1 m2)   = MEnc (go m1) (go m2)
     go (MSymK m1 m2)  = MSymK (go m1) (go m2)
-    go (MShrK m1 m2)  = 
-        U.findWithDefault m' m' $ postEqs eqs 
+    go (MShrK m1 m2)  =
+        U.findWithDefault m' m' $ postEqs eqs
       where
         m' = MShrK (go m1) (go m2)
     go (MAsymPK m)    = MAsymPK (go m)
@@ -345,7 +345,7 @@
 -- | Convert a set of equalities ot the tuple with lists for each individual
 -- equality type.
 toLists :: Equalities -> ([TIDEq], [TIDRoleEq], [ArbMsgEq], [AVarEq], [MVarEq], [MsgEq])
-toLists eqs = 
+toLists eqs =
   (getTIDEqs eqs, getTIDRoleEqs eqs, getArbMsgEqs eqs
   , getAVarEqs eqs, getMVarEqs eqs, getPostEqs eqs)
 
@@ -353,8 +353,8 @@
 --
 -- POST: Order of equalities equal to order in result of 'toLists'.
 toAnyEqs :: Equalities -> [AnyEq]
-toAnyEqs eqs = 
-  map TIDEq a ++ map TIDRoleEq b ++ map ArbMsgEq c ++ map AVarEq d ++ 
+toAnyEqs eqs =
+  map TIDEq a ++ map TIDRoleEq b ++ map ArbMsgEq c ++ map AVarEq d ++
   map  MVarEq e ++ map MsgEq f
   where (a, b, c, d, e, f) = toLists eqs
 
@@ -395,7 +395,7 @@
 -- | Substitute and normalize the postponed equalities with respect to the
 -- other equalities.
 normPostEqs :: Equalities -> Equalities
-normPostEqs eqs0 = 
+normPostEqs eqs0 =
     eqs { postEqs = U.map (substMsg eqs) (postEqs eqs0) }
   where
     eqs = eqs0 { postEqs = U.empty }
@@ -407,8 +407,8 @@
 -- equalities over fresh messages. Bidirectional keys are handled by delaying
 -- their solution until only one solution is possible.
 solve :: Monad m => [AnyEq] -> Equalities -> m Equalities
-solve ueqs eqs = 
-  -- trace ("SOLVE: " ++ render (fsep $ punctuate comma $ map sptAnyEq ueqs)) $ 
+solve ueqs eqs =
+  -- trace ("SOLVE: " ++ render (fsep $ punctuate comma $ map sptAnyEq ueqs)) $
   fst `liftM` solveRepeated ueqs eqs False
 
 -- | Repeatedly solve unification equations until the solution doesn't change
@@ -420,7 +420,7 @@
 -- equalities has changed.
 solveRepeated :: Monad m => [AnyEq] -> Equalities -> Bool -> m (Equalities, Bool)
 solveRepeated [] eqs False = return (eqs, False)
-solveRepeated [] eqs True  = 
+solveRepeated [] eqs True  =
     solveRepeated (map MsgEq $ getPostEqs eqs) (eqs { postEqs = U.empty }) False
 solveRepeated (ueq:ueqs) eqs improved = do
     (ueqs', eqs', improved') <- solve1 ueq eqs
@@ -428,14 +428,14 @@
 
 -- | Solve a single unification equation.
 solve1 :: Monad m => AnyEq -> Equalities -> m ([AnyEq], Equalities, Bool)
-solve1 ueq eqs@(Equalities tideqs roleeqs aveqs mveqs arbmeqs posteqs) = 
+solve1 ueq eqs@(Equalities tideqs roleeqs aveqs mveqs arbmeqs posteqs) =
  -- trace ("solve1: " ++ show (sptAnyEq ueq)) $
   case ueq of
     TIDEq (tid1, tid2) ->
       let tid1' = substTID eqs tid1
           tid2' = substTID eqs tid2
           elimTID x y = return
-            ( mkAnyEqs TIDRoleEq roleeqs ++ mkAnyEqs ArbMsgEq arbmeqs ++ 
+            ( mkAnyEqs TIDRoleEq roleeqs ++ mkAnyEqs ArbMsgEq arbmeqs ++
               mkAnyEqs AVarEq aveqs ++ mkAnyEqs MVarEq mveqs ++
               map MsgEq (U.toList posteqs)
             , empty { tidEqs = M.insert x y tideqs }
@@ -452,13 +452,13 @@
       in
         case M.lookup tid' roleeqs of
           Just role' | role' /= role -> different "role" role role'
-          _                          -> 
+          _                          ->
             updateSolution (eqs { roleEqs = M.insert tid' role roleeqs })
 
     RoleEq (role1, role2)
       | role1 == role2 -> skipEq
       | otherwise      -> different "role" role1 role2
-            
+
     AVarEq (av1, av2) ->
       let av1' = substAVar eqs av1
           av2' = substAVar eqs av2
@@ -473,18 +473,18 @@
 
     ArbMsgEq (lhs, rhs) ->
       let elimArbMsgId x y
-            | x `elem` msgAMIDs y = case y of 
-                MInvKey _ -> postpone (MArbMsg x) y 
+            | x `elem` msgAMIDs y = case y of
+                MInvKey _ -> postpone (MArbMsg x) y
                   -- Here, we have to postpone the equality as 'x = inv(x)'
                   -- has a solution.
-                  -- 
+                  --
                   -- This is a hacky solution. The real solution is to
                   -- implement an occurs check strong enough to deal with the
                   -- 'inv(inv(x)) = x' cancellation rule.
                   --
                   -- FIXME: Implement proper equational unification, as done
                   -- in the tamarin-prover.
-                _  -> noUnifier $ "occurs check failed for '" ++ show x ++ 
+                _  -> noUnifier $ "occurs check failed for '" ++ show x ++
                                   "' in '" ++ show y ++ "'"
             | otherwise =
                 updateSolution (eqs {
@@ -499,20 +499,20 @@
           (lhs'          , (MArbMsg aid2)) -> elimArbMsgId aid2 lhs'
           ((MArbMsg aid1), rhs'          ) -> elimArbMsgId aid1 rhs'
           (lhs'          , rhs'          ) -> newEqs [MsgEq (lhs', rhs')]
-    
+
     MVarEq (lhs, rhs) ->
-      let elimMVar x y 
+      let elimMVar x y
             | x `elem` msgFMV y = case y of
-                MInvKey _ -> postpone (MMVar x) y 
+                MInvKey _ -> postpone (MMVar x) y
                   -- Here, we have to postpone the equality as 'x = inv(x)'
                   -- has a solution.
-                  -- 
+                  --
                   -- This is a hacky solution. The real solution is to
                   -- implement an occurs check strong enough to deal with the
                   -- 'inv(inv(x)) = x' cancellation rule.
                 _ -> noUnifier $ "occurs check failed for '" ++ show x ++
                                  "' in '" ++ show y ++ "'"
-            | otherwise = 
+            | otherwise =
                 updateSolution (eqs {
                     mvarEqs =  M.insert x y $ M.map (substMsg elimEqs) mveqs
                   })
@@ -524,7 +524,7 @@
           (lhs'            ,      (MMVar mv2)) -> elimMVar mv2 lhs'
           (     (MMVar mv1), rhs'            ) -> elimMVar mv1 rhs'
           (lhs'            , rhs'            ) -> newEqs [MsgEq (lhs', rhs')]
-            
+
     MsgEq eq -> case (substMsg eqs *** substMsg eqs) eq of
       -- The order of pattern matches ensures that message variables are always
       -- substituted by arbitrary-message ids.
@@ -575,7 +575,7 @@
         | otherwise -> different "constant" c1 c2
 
       (m1, m2) -> different "message" m1 m2
-  
+
   where
     skipEq              = return ([],   eqs , False)
     newEqs ueqs         = return (ueqs, eqs , False)
@@ -671,13 +671,13 @@
 -- | Add a mapping from one arbitrary-message id to another arbitrary-message
 -- id, possibly overriding an existing mapping.
 addArbMsgIdMapping :: ArbMsgId -> ArbMsgId -> Mapping -> Mapping
-addArbMsgIdMapping from to = mapMapping $ \eqs -> 
+addArbMsgIdMapping from to = mapMapping $ \eqs ->
   eqs { arbmEqs = M.insert from (MArbMsg to) $ arbmEqs eqs }
 
 -- | Add a mapping from one thread identifier to an other role, possibly
 -- overriding an existing mapping.
 addTIDRoleMapping :: TID -> Role -> Mapping -> Mapping
-addTIDRoleMapping tid role = mapMapping $ \eqs -> 
+addTIDRoleMapping tid role = mapMapping $ \eqs ->
   let tid' = substTID eqs tid
   in  eqs { roleEqs = M.insert tid' role $ roleEqs eqs }
 
@@ -770,14 +770,14 @@
 
 {-
 -- | Convert the equalities for pretty printing.
-sptEqualities :: Equalities -> 
+sptEqualities :: Equalities ->
                  ([Doc], [Doc], [Doc]) -- ^ quantified variables, representable
                                        --   equalities, non-representable equalities
 sptEqualities (Equalities tideqs roleeqs aveqs mveqs arbmeqs) =
   ( map sptTID (M.keys roleeqs) ++
     [ sptArbMsgId aid | (aid, Nothing) <- M.toList arbmeqs]
-  , ppMapMaybe ppTIDRoleEq roleeqs ++ 
-    ppVarEqs ppAVar ppAVar                 aveqs ++ 
+  , ppMapMaybe ppTIDRoleEq roleeqs ++
+    ppVarEqs ppAVar ppAVar                 aveqs ++
     ppVarEqs ppMVar sptMessage             mveqs ++
     ppVarEqs ppAgent (maybe emptyDoc (either ppAgent ppAVar)) arbmeqs
   , ppMap      ppTIDEq  tideqs ++
diff --git a/src/Scyther/Event.hs b/src/Scyther/Event.hs
--- a/src/Scyther/Event.hs
+++ b/src/Scyther/Event.hs
@@ -50,19 +50,19 @@
 
 -- | Is the event order cyclic?
 cyclic :: EventOrder -> Bool
-cyclic evord = 
+cyclic evord =
   maybe True (const False) $ foldM visitForest S.empty (map fst evPairs)
-  where 
+  where
   evPairs = S.toList evord
   visitForest visited x
     | x `S.member` visited = return visited
     | otherwise            = findLoop S.empty visited x
 
   -- findLoop :: Ord n => S.Set n -> S.Set n -> n -> Maybe (S.Set n)
-  findLoop parents visited x 
+  findLoop parents visited x
     | x `S.member` parents = mzero
     | x `S.member` visited = return visited
-    | otherwise            = 
+    | otherwise            =
         S.insert x `liftM` foldM (findLoop parents') visited next
     where
     next = [ e' | (e,e') <- evPairs, e == x ]
@@ -82,7 +82,7 @@
   existsPath visited (x:xs)
     | x == to              = True
     | x `S.member` visited = existsPath visited xs
-    | otherwise            = 
+    | otherwise            =
         existsPath (S.insert x visited) (next ++ xs)
     where
     next = [ e' | (e,e') <- evPairs, e == x ]
@@ -116,7 +116,7 @@
 eventTag :: (Event -> Doc) -- ^ Raw pretty printing function
          -> (Doc -> Doc)   -- ^ Modifier for learn events
          -> (Doc -> Doc)   -- ^ Modifier for step events
-         -> Event -> Doc 
+         -> Event -> Doc
 eventTag pp ln _  ev@(Learn _)  = ln (pp ev)
 eventTag pp _  st ev@(Step _ _) = st (pp ev)
 
@@ -133,29 +133,29 @@
 isaRawEvent :: Bool -> IsarConf -> Mapping -> Event -> Doc
 isaRawEvent addParens conf _       (Learn m)       =
     (if addParens then parens else id) $ isar conf m
-isaRawEvent _         conf mapping (Step tid step) = 
+isaRawEvent _         conf mapping (Step tid step) =
     nestShort 2 lparen rparen (fsep [isar conf tid <> comma, ppStep])
   where
     ppStep = isaRoleStep conf (threadRole tid (getMappingEqs mapping)) step
 
 -- | Render an event in the Isar format.
-isaEvent :: IsarConf 
+isaEvent :: IsarConf
          -> Mapping   -- ^ A mapping of the logical variables. The thread id to
                       -- role assigment is used for resolving steps to their
                       -- abbreviated notation consisting of role name plus step
                       -- label.
          -> Event -> Doc
-isaEvent conf m = 
+isaEvent conf m =
     eventTag (isaRawEvent False conf m) (inSet "knows t") (inSet "steps t")
-  where 
+  where
     inSet set d = d <-> isaIn conf <-> text set
 
 -- | Render an event order in the Isar format. See 'isaEvent' for an
 -- explanation of the mapping.
 isaEventOrd :: IsarConf -> Mapping -> (Event, Event) -> Doc
-isaEventOrd conf m (e1, e2) = 
+isaEventOrd conf m (e1, e2) =
     esplBefore conf (ppEv e1) (ppEv e2)
-  where 
+  where
     ppEv = eventTag (isaRawEvent True conf m) (text "Ln" <>) (text "St" <>)
 
 instance Isar Event where
@@ -171,7 +171,7 @@
 -- possible).
 sptRawEvent :: Mapping -> Event -> Doc
 sptRawEvent _       (Learn m)       = sptMessage m
-sptRawEvent mapping (Step tid step) = 
+sptRawEvent mapping (Step tid step) =
     parens $ fsep [sptTID tid <> comma, ppStep]
   where
     ppStep = sptRoleStep (threadRole tid (getMappingEqs mapping)) step
@@ -182,9 +182,9 @@
 
 -- | Render an event order in security protocol theory format.
 sptEventOrd :: Mapping -> [Event] -> Doc
-sptEventOrd m = 
+sptEventOrd m =
     fcat . punctuate (text " < ") . map ppEv
-  where 
+  where
     ppEv = eventTag (sptRawEvent m) ((text "Ln" <>) . parens) (text "St" <>)
 
 
diff --git a/src/Scyther/Formula.hs b/src/Scyther/Formula.hs
--- a/src/Scyther/Formula.hs
+++ b/src/Scyther/Formula.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveDataTypeable, FlexibleContexts #-}
 module Scyther.Formula (
 -- * Data Types
     Atom(..)
diff --git a/src/Scyther/GoalFlow.hs b/src/Scyther/GoalFlow.hs
--- a/src/Scyther/GoalFlow.hs
+++ b/src/Scyther/GoalFlow.hs
@@ -32,7 +32,7 @@
   isEncOrHash (MEnc _ _) = True
   isEncOrHash (MHash _)  = True
   isEncOrHash _          = False
-  
+
 -- | All flows between different protocols
 protoFlows :: Protocol -> [(((Role,RoleStep),Message),((Role,RoleStep),Message),Equalities)]
 protoFlows proto = do
@@ -65,14 +65,14 @@
 -- computing the msg-variable-nonces
 --
 --   1. determine combined relation: roleOrd + msgFlow
---   2. toposort 
+--   2. toposort
 --   3. in order of toposort, for every receive determine
 --      first received msg. vars
 --   4. for every first received msg. var, for every flow
 --      equating it, transfer assignments
 --
 sptMsgVarAnn :: Protocol -> Doc
-sptMsgVarAnn proto = 
+sptMsgVarAnn proto =
   (if acyclic then emptyDoc else text "WARNING: full relation is cyclic") $-$
   (fsep . punctuate (text " <") $ map ppStep steps)
   where
@@ -91,7 +91,7 @@
      do guard (m2 == v)
         extractTarget m1)
     where
-    extractTarget m = case m of 
+    extractTarget m = case m of
       Fresh  _ -> return . Left $ m2
       MsgVar _ -> return . Right $ m2
       _        -> mzero -- TODO: Make this more precise; i.e. its not
@@ -109,8 +109,8 @@
     ann `S.union`
     S.fromList [
     where
-    
-inFlows :: Protocol -> Pattern -> 
+
+inFlows :: Protocol -> Pattern ->
            [(((Role,RoleStep),(Message,TID),(Message,TID),Equalities)]
 inFlows proto ptRecv = do
   send@(_, Send _ ptSend) <- protoSteps proto
@@ -129,7 +129,7 @@
 -}
 
 firstRecvs :: Role -> RoleStep -> S.Set Id
-firstRecvs role recv@(Recv _ pt) = 
+firstRecvs role recv@(Recv _ pt) =
   patFMV pt `S.difference`
   (S.unions . map (patFMV . stepPat) $ takeWhile (/= recv) (roleSteps role))
 firstRecvs _         _           = S.empty
@@ -149,10 +149,10 @@
 
 existsFlow :: Pattern -> Pattern -> Bool
 existsFlow ptSend ptRecv = or
-  [ unifiable m1 m2 
-  | m1 <- S.toList $ messageparts mSend, 
+  [ unifiable m1 m2
+  | m1 <- S.toList $ messageparts mSend,
     m2 <- S.toList $ submessages mRecv,
-    isEncOrHash m1, 
+    isEncOrHash m1,
     isEncOrHash m2
   ]
   where
@@ -179,7 +179,7 @@
   steps = protoSteps proto
 
 sptProtoOrders :: Protocol -> Doc
-sptProtoOrders proto = 
+sptProtoOrders proto =
   text "role ord:" $-$
   nest 2 (ppRel $ roleRel proto) $-$
   text "flow rel:" $-$
@@ -197,10 +197,10 @@
 
 
 goalFlowAnalysis :: Theory -> Doc
-goalFlowAnalysis (Theory _ items) = 
+goalFlowAnalysis (Theory _ items) =
   vcat . intersperse (text "") $ [ analyzeProto p | ThyProtocol p <- items ]
   where
-  analyzeProto proto = 
+  analyzeProto proto =
     sptProtocol proto $-$
     text "" $-$
     sptProtoOrders proto
diff --git a/src/Scyther/Message.hs b/src/Scyther/Message.hs
--- a/src/Scyther/Message.hs
+++ b/src/Scyther/Message.hs
@@ -105,21 +105,21 @@
 -- | A fresh message.
 newtype Fresh = Fresh { getFresh :: LocalId }
   deriving( Eq, Ord, Show, Data, Typeable )
-  
 
+
 -- | Denotations of messages as they occurr during reasoning. Note that we do
 -- not model agents, as in the proofs that we want to do no actual agent
 -- reference will be needed.
 --
 -- Note: This is /no free algebra/ due to the nested equalities on thread
 -- identifiers and the key-inversion function. However, there is still a most
--- general unifier. The easiest way to understand these messages is to map 
+-- general unifier. The easiest way to understand these messages is to map
 -- them to the corresponding Isabelle proof states.
-data Message = 
+data Message =
     MConst  Id          -- ^ A global constant.
   | MFresh  Fresh       -- ^ A freshly generated message.
   | MAVar   AVar        -- ^ A symbolically instantiated agent variable.
-  | MMVar   MVar        -- ^ A symbolically instantiated message variable; 
+  | MMVar   MVar        -- ^ A symbolically instantiated message variable;
                         --   @MVar (LocalId (Id \"v\", TID 1))@ corresponds to @s(|MV ''v'' tid1|)@.
   | MArbMsg ArbMsgId    -- ^ An arbitrary message; i.e., a logical message variable.
   | MHash   Message            -- ^ Hashing
@@ -145,11 +145,11 @@
 
 -- | The thread corresponding to an agent variable
 avarTID :: AVar -> TID
-avarTID = snd . getLocalId . getAVar 
+avarTID = snd . getLocalId . getAVar
 
 -- | The thread corresponding to an message variable
 mvarTID :: MVar -> TID
-mvarTID = snd . getLocalId . getMVar 
+mvarTID = snd . getLocalId . getMVar
 
 -- | Thread identifiers of a message.
 msgTIDs :: Message -> [TID]
@@ -306,7 +306,7 @@
 normMsg (MTup  m1 m2)         = MTup (normMsg m1) (normMsg m2)
 normMsg (MEnc  m1 m2)         = MEnc (normMsg m1) (normMsg m2)
 normMsg (MSymK m1 m2)         = MSymK (normMsg m1) (normMsg m2)
-normMsg (MShrK m1 m2)  
+normMsg (MShrK m1 m2)
   | m1' < m2' = MShrK m1' m2'
   | otherwise = MShrK m2' m1'
   where
@@ -323,7 +323,7 @@
 splitNonTrivial :: Message -> [Message]
 splitNonTrivial (MTup m1 m2) = splitNonTrivial m1 `mplus` splitNonTrivial m2
 splitNonTrivial m            = do
-  guard (not $ trivial m) 
+  guard (not $ trivial m)
   return m
 
 
@@ -335,7 +335,7 @@
 -- | Textual symbolic application of the substitution.
 -- TODO: Remove hack about thread identifier to state assignment.
 esplSubst :: LocalId -> IsarConf -> Doc -> Doc
-esplSubst (LocalId (_,tid)) conf var 
+esplSubst (LocalId (_,tid)) conf var
   | tid == 0 = isarSubst conf <> parens var
   | otherwise = text "s" <> parens var
 
@@ -361,7 +361,7 @@
 instance Isar Message where
   isar conf x = case x of
       (MConst i)    -> text "LC" <-> isar conf i
-      (MFresh i)    -> isar conf i 
+      (MFresh i)    -> isar conf i
       (MAVar i)     -> isar conf i
       (MMVar i)     -> isar conf i
       (MArbMsg i)   -> isar conf i
@@ -381,9 +381,9 @@
       split (MTup m1 m2) = m1 : split m2
       split m = [m]
       -- determine output parameters
-      (n,ldelim,rdelim) 
+      (n,ldelim,rdelim)
         | isPlainStyle conf = (3, text "{|", text "|}")
-        | otherwise        = (2, symbol "\\<lbrace>", symbol "\\<rbrace>") 
+        | otherwise        = (2, symbol "\\<lbrace>", symbol "\\<rbrace>")
 
 
 ------------------------------------------------------------------------------
@@ -426,7 +426,7 @@
   (MInvKey m)   -> text "inv" <> ppBetween 1 "(" ")" m
   where
   -- pretty print a tuple as right associate list
-  ppBetween n lead finish m@(MTup _ _) = 
+  ppBetween n lead finish m@(MTup _ _) =
     fcat . (text lead :) . (++[text finish]) . map (nest n) . punctuate (text ", ") . map sptMessage $ split m
   ppBetween _ lead finish m = text lead <> sptMessage m <> text finish
   -- split right associate nested tuples
diff --git a/src/Scyther/Protocol.hs b/src/Scyther/Protocol.hs
--- a/src/Scyther/Protocol.hs
+++ b/src/Scyther/Protocol.hs
@@ -57,7 +57,7 @@
 
 -- * Output
   , isaRoleStep
-  , sptId 
+  , sptId
   , sptLabel
   , sptPattern
   , sptRoleStep
@@ -92,7 +92,7 @@
   deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )
 
 -- | A message pattern.
-data Pattern = 
+data Pattern =
     PConst  Id                -- ^ A global constant.
   | PFresh  Id                -- ^ A message to be freshly generated.
   | PAVar   Id                -- ^ An agent variable.
@@ -113,7 +113,7 @@
   deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )
 
 -- | A role step.
-data RoleStep = 
+data RoleStep =
     Send Label Pattern              -- ^ A send step.
   | Recv Label Pattern              -- ^ A receive step.
   | Match Label Bool VarId Pattern  -- ^ A match or not-match step.
@@ -121,15 +121,15 @@
 
 -- | A role of a protocol. Its name has no operational meaning, but is carried
 -- along to allow for human readable printing.
-data Role = Role { 
+data Role = Role {
     roleName  :: String
-  , roleSteps :: [RoleStep] 
+  , roleSteps :: [RoleStep]
   }
   deriving( Eq, Ord, Show, Data, Typeable {-! NFData !-} )
 
 -- | A protocol. As for roles, its name has no operational meaning, but is
 -- carried along to allow for human readable printing.
-data Protocol = Protocol { 
+data Protocol = Protocol {
     protoName  :: String
   , protoRoles :: [Role]
   }
@@ -299,14 +299,14 @@
 -- | Pretty print a protocol ill-formedness.
 sptProtoIllformedness :: ProtoIllformedness -> Doc
 sptProtoIllformedness pif = case pif of
-  NonUnique role -> 
+  NonUnique role ->
     text $ "role '" ++ roleName role ++ "' contains duplicate steps."
   UseBeforeBind role step v ->
-    text (roleName role) <> colon <-> 
+    text (roleName role) <> colon <->
     sptRoleStep Nothing step <> colon <->
     text "message variable" <-> quotes (sptId v) <-> text "used before bound."
   AccessibleLongTermKey role step _ ->
-    text (roleName role) <> colon <-> 
+    text (roleName role) <> colon <->
     sptRoleStep Nothing step <> colon <->
     text "long-term keys must not be accessible."
 
@@ -321,17 +321,17 @@
 roleOrd :: Role -> RoleStepOrder
 roleOrd role = zip steps (tailDef [] steps)
   where
-  steps = zip (roleSteps role) (repeat role) 
+  steps = zip (roleSteps role) (repeat role)
 
 -- | The order of role steps in the protocol such that every send step
 -- occurs before every receive step having the same label.
 labelOrd :: Protocol -> RoleStepOrder
-labelOrd proto = 
-  [ (send, recv) | send@(Send l  _, _) <- steps, 
+labelOrd proto =
+  [ (send, recv) | send@(Send l  _, _) <- steps,
                    recv@(Recv l' _, _) <- steps, l == l' ]
   where
   steps = concat [ zip (roleSteps role) (repeat role) | role <- protoRoles proto ]
- 
+
 -- | The combination of all role orders and the label order of the protocol.
 protoOrd :: Protocol -> RoleStepOrder
 protoOrd proto = labelOrd proto ++ concatMap roleOrd (protoRoles proto)
@@ -373,7 +373,7 @@
 -- | Pretty print a rolestep in ISAR format. If a role is given, then the label
 -- of the role step in this role is used to abbreviate the step name.
 isaRoleStep :: IsarConf -> Maybe Role -> RoleStep -> Doc
-isaRoleStep conf optRole step = 
+isaRoleStep conf optRole step =
   case optRole of
     Just role | step `elem` roleSteps role -> -- abbreviate
       text $ roleName role ++ "_" ++ stepLabel step
@@ -419,7 +419,7 @@
       -- determine output parameters
       (n,left,right)
         | isPlainStyle conf = (3, text "<|", text "|>")
-        | otherwise         = (2, symbol "\\<langle>", symbol "\\<rangle>") 
+        | otherwise         = (2, symbol "\\<langle>", symbol "\\<rangle>")
       -- extract a variable of a bi-directional key
       keyVar (PAVar v) = parens $ text "AVar" <-> isar conf v
       keyVar (PMVar v) = parens $ text "MVar" <-> isar conf v
@@ -439,7 +439,7 @@
       ppPat pt            = nestShort' "(" ")" (isar conf pt)
 
 instance Isar Role where
-  isar conf (Role name steps) = 
+  isar conf (Role name steps) =
     text "role" <-> text name $-$
     text "where" <-> text "\"" <> text name <-> text "=" $-$
     nest 2 (
@@ -455,7 +455,7 @@
     text "protocol" <-> text name $-$
     sep [text "where" <-> text "\"" <> text name <-> text "=", roleSet]
     where
-    roleSet = nestShort' "{" "}\"" 
+    roleSet = nestShort' "{" "}\""
       (fsep $ punctuate comma $ map (text . roleName) roles)
 
 
@@ -486,7 +486,7 @@
     (PAny)        -> char '_'
   where
     -- pretty print a tuple as right associate list
-    ppBetween n lead finish pt@(PTup _ _) = 
+    ppBetween n lead finish pt@(PTup _ _) =
       fcat . (text lead :) . (++[text finish]) . map (nest n) . punctuate (text ", ") . map sptPattern $ split pt
     ppBetween _ lead finish pt = text lead <> sptPattern pt <> text finish
     -- split right associate nested tuples
@@ -496,7 +496,7 @@
 -- | Pretty print a rolestep. If a role is given, then the label of the role
 -- step in this role is used to abbreviate the step name.
 sptRoleStep :: Maybe Role -> RoleStep -> Doc
-sptRoleStep optRole step = 
+sptRoleStep optRole step =
   case optRole of
     Just role | step `elem` roleSteps role -> -- abbreviate
       text $ roleName role ++ "_" ++ stepLabel step
@@ -517,7 +517,7 @@
 
 -- | Pretty print a role in SP theory format.
 sptRole :: Role -> Doc
-sptRole(Role name steps) = 
+sptRole(Role name steps) =
   text "role" <-> text name $-$
   nestBetween 2 lbrace rbrace (
     (vcat $ map (sptRoleStep Nothing) steps)
diff --git a/src/Scyther/Theory.hs b/src/Scyther/Theory.hs
--- a/src/Scyther/Theory.hs
+++ b/src/Scyther/Theory.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveDataTypeable, FlexibleContexts #-}
 module Scyther.Theory (
 
   -- * Theorems
diff --git a/src/Scyther/Theory/Dot.hs b/src/Scyther/Theory/Dot.hs
--- a/src/Scyther/Theory/Dot.hs
+++ b/src/Scyther/Theory/Dot.hs
@@ -36,7 +36,7 @@
 
 -- | Find a value and display the key in case it cannot be found.
 findShowError :: (Ord k, Show k) => k -> M.Map k v -> v
-findShowError k = 
+findShowError k =
   findWithError ("findShowError: key '"++show k++"' not in map.") k
 
 -- | The style of an edge between two nodes of the same thread.
@@ -111,13 +111,13 @@
   threadsOfRole optRole = [ tid | (tid, optRole') <- roleeqs, optRole == optRole' ]
 
   tidGroupEqs :: [[(TID, (Int, Int))]]
-  tidGroupEqs = 
-    [(intruderTID, (0,0))] : 
-    [  [ (tid, (roleIdx, tidIdx)) 
+  tidGroupEqs =
+    [(intruderTID, (0,0))] :
+    [  [ (tid, (roleIdx, tidIdx))
        | (tidIdx, tid) <- zip [0..] $ threadsOfRole optRole ]
     | (roleIdx, optRole) <- optRoles ]
 
-  getColor idx = 
+  getColor idx =
       maybe (error $ "color of " ++ show idx ++ " not found") snd $
       find ((idx ==) . fst) $ colors
 
@@ -165,7 +165,7 @@
 
 -- | Lift a unary operation to our custom dot monad.
 liftDot1 :: (Dot (a, DotState) -> Dot (b, DotState)) -> (MyDot a -> MyDot b)
-liftDot1 f m = ReaderT $ \env -> StateT $ \s -> 
+liftDot1 f m = ReaderT $ \env -> StateT $ \s ->
   f (runStateT (runReaderT m env) s)
 
 -- | A lifted version of the @cluster@ method for constructing a graph cluster.
@@ -191,7 +191,7 @@
       color <- case ev of
         Learn _    -> asks $ getColorWithDefault intruderTID . colorMap
         Step tid _ -> asks $ getColorWithDefault tid         . colorMap
-      nid <- liftDot $ node 
+      nid <- liftDot $ node
         [ ("label", label)
         , ("shape", shape)
         , ("style", "filled")
@@ -220,7 +220,7 @@
   s <- get
   put $ s { threadAtoms = M.fromList $ mapMaybe prepare info }
   where
-  prepare (optTid, optRole) = do 
+  prepare (optTid, optRole) = do
     role <- optRole
     tid  <- optTid
     return (optTid, [AEq (E.TIDRoleEq (tid, role))])
@@ -239,7 +239,7 @@
 dotThreads quantified = do
   threadInfo <- gets $ M.toList . threadAtoms
   mapM_ (uncurry (dotThread quantified)) threadInfo
-  
+
 -- | Produce the dot code to for a single thread described by the list of
 -- atoms.
 dotThread :: Bool                             -- ^ True iff the thread is quantified
@@ -312,8 +312,8 @@
 -- | Produce the dot code of the facts.
 dotFacts :: Facts -> MyDot ()
 dotFacts facts = do
-  resetThreadAtoms $ 
-    map (\tid -> (Just tid, threadRole tid facts)) (quantifiedTIDs facts) 
+  resetThreadAtoms $
+    map (\tid -> (Just tid, threadRole tid facts)) (quantifiedTIDs facts)
   mapM_ dotAtom $ toAtoms facts
   dotThreads True
 
@@ -326,7 +326,7 @@
   x <- local (tryNoteRole tid optRole) $ m
   -- restore thread atoms
   let optTid       = Just tid
-      restoreAtoms = maybe (M.delete optTid) (M.insert optTid) 
+      restoreAtoms = maybe (M.delete optTid) (M.insert optTid)
                            (M.lookup optTid (threadAtoms s))
   modify $ \s' -> s' { threadAtoms = restoreAtoms $ threadAtoms s' }
   -- return the result
@@ -335,7 +335,7 @@
 -- | Modify the thread to role assignment.
 tryNoteRole :: TID -> Maybe Role -> DotEnv -> DotEnv
 tryNoteRole _   Nothing     env = env
-tryNoteRole tid (Just role) env = 
+tryNoteRole tid (Just role) env =
   env { threadMapping = E.addTIDRoleMapping tid role (threadMapping env) }
 
 -- | Produce the dot code of a formula without disjunctions.
@@ -346,8 +346,8 @@
 dotFormula (FExists (Left tid) inner) = do
   localThreadInfo tid (findRole tid inner) $ do
     dotFormula inner
-    optAtoms <- gets $ M.lookup (Just tid) . threadAtoms 
-    maybe (return ()) (dotThread True (Just tid)) optAtoms 
+    optAtoms <- gets $ M.lookup (Just tid) . threadAtoms
+    maybe (return ()) (dotThread True (Just tid)) optAtoms
 dotFormula (FExists (Right aid) inner) = do
   _ <- liftDot $ node [("label", "some agent " ++ show aid)]
   dotFormula inner
@@ -387,7 +387,7 @@
     dotFacts $ sePrem se
   -- restore state before premise dotting because premise and conclusion should
   -- not share nodes
-  put s 
+  put s
   _ <- myCluster $ do
     liftDot $ attribute ("label","conclusion")
     dotConclusion $ seConcl se
@@ -395,7 +395,7 @@
 
 -- | Dot a sequent with some marked events.
 dotSequentMarked :: S.Set Event -> Sequent -> Dot ()
-dotSequentMarked markedEvs se = 
+dotSequentMarked markedEvs se =
   runMyDot (threadColors se) (eqsToMapping $ sePrem se) markedEvs $ dotSequent se
 
 -- | Convert a protocol to a dot graph.
@@ -414,7 +414,7 @@
 
   rMap = M.fromList $ zip (map roleName roles) [2..]
   cMap = colorGroups intruderHue (replicate (length roles + 2) 1)
-  getColor gIdx eIdx = 
+  getColor gIdx eIdx =
      maybe (error "color not found") snd $ find (((gIdx, eIdx) == ) . fst) cMap
   getRoleColor role = hsvToHex $ getColor (findShowError role rMap) 0
 
@@ -425,7 +425,7 @@
       , ("fillcolor",color)
       ] ++ attrs
 
-  dotStep (role, step) = 
+  dotStep (role, step) =
     mkNode (render $ sptRoleStep Nothing step) (getRoleColor role) []
 
   dotSend stepMap send@(_, Send l _) = sequence_
@@ -439,8 +439,8 @@
         ids = roleId : map getStepId (roleSteps role)
         mkEdge (from, to) = edge from to threadEdgeStyle
     mapM_ mkEdge (zip ids (tail ids))
-    
 
+
 ------------------------------------------------------------------------------
 -- Calling Graphviz' dot tool
 ------------------------------------------------------------------------------
@@ -454,6 +454,6 @@
 graphvizDotToPng dotTool dotFile pngFile msgChan = do
   let cmd = dotTool ++ " -Tpng -o " ++ pngFile ++ " " ++ dotFile
   writeChan msgChan cmd
-  hProc <- runCommand cmd 
+  hProc <- runCommand cmd
   _ <- waitForProcess hProc
   return ()
diff --git a/src/Scyther/Theory/Html.hs b/src/Scyther/Theory/Html.hs
--- a/src/Scyther/Theory/Html.hs
+++ b/src/Scyther/Theory/Html.hs
@@ -65,7 +65,7 @@
   , giTemplate    :: FilePath  -- ^ Path to template index.
   , giOutDir      :: FilePath  -- ^ Path to the output directory.
   , giMarkup      :: HtmlMarkup Doc -- ^ Document representing theory to output.
-  , giProofScript :: FilePath -> String    
+  , giProofScript :: FilePath -> String
                                -- ^ A function mapping the output file name to a
                                --   string representation of Isabelle/HOL
                                --   certificate. The generation time will be
@@ -95,7 +95,7 @@
   where
     info = PathInfo
       { inputFileCopy   = filesDir info </> takeFileName (giInputFile input)
-      , proofScriptFile = filesDir info </> 
+      , proofScriptFile = filesDir info </>
           addExtension (takeBaseName (giInputFile input) ++ "_cert_auto") "thy"
       , outDir          = giOutDir input
       , imageDir        = "img"
@@ -116,7 +116,7 @@
 -- theories for exporting as JSON.
 jsGenerationInfo :: GenerationInput
                  -> NominalDiffTime  -- ^ Proof script generation time.
-                 -> Maybe (Bool, NominalDiffTime) 
+                 -> Maybe (Bool, NominalDiffTime)
                                      -- ^ Proof checking time.
                  -> JSObject JSValue
 jsGenerationInfo input genTime optCheckInfo = toJSObject $
@@ -133,7 +133,7 @@
     fileLink file = (toJSString (takeFileName file), toJSString file)
     genTimeString = "generated in " ++ show genTime
 
-    checkInfo Nothing                              = 
+    checkInfo Nothing                              =
         [ ("certificateStatus", showJSON . toJSString $ genTimeString) ]
     checkInfo (Just (success, checkTime)) =
         [ ( "certificateStatus", showJSON . toJSString $ genTimeString ++ status) ]
@@ -151,7 +151,7 @@
   copyFile (giInputFile input) (mkAbsolute paths $ inputFileCopy paths)
   -- timed proof script generation
   putStr " generating proof script: " >> hFlush stdout
-  genTime <- timed_ $ writeAbsolute (proofScriptFile paths) 
+  genTime <- timed_ $ writeAbsolute (proofScriptFile paths)
                         (giProofScript input $ proofScriptFile paths)
   putStrLn $ show genTime
   -- timed isabelle check
@@ -159,7 +159,7 @@
     Nothing           -> return Nothing
     Just machineCheck -> do
       putStr " checking proof script: " >> hFlush stdout
-      (optErrMsg, checkTime) <- timed $ 
+      (optErrMsg, checkTime) <- timed $
         machineCheck (mkAbsolute paths $ proofScriptFile paths)
       putStrLn $ show checkTime
       -- write log file copy
@@ -231,12 +231,12 @@
 type Attributes = [(String,String)]
 
 -- | Output a document surrounded by a tag.
-withTag :: Document d => 
+withTag :: Document d =>
            String      -- ^ Tag name
         -> Attributes  -- ^ Name, value pairs for attributes (no escaping done!)
         -> d           -- ^ Inner document
         -> d
-withTag tag atts d = 
+withTag tag atts d =
   zeroWidthText ("<" ++ tag ++ attsStr ++ ">") <> d <> zeroWidthText ("</" ++ tag ++ ">")
   where
   attsStr | null atts = ""
@@ -265,14 +265,14 @@
   , htmlThmDefs     :: M.Map (String, String) HtmlSequent
   , htmlThmRefs     :: M.Map Int HtmlSequent
   , htmlGraphRefs   :: M.Map Int HtmlSequent
-  , htmlExpls       :: M.Map String Int 
+  , htmlExpls       :: M.Map String Int
   , htmlNextExplRef :: Int
   }
 
 type GraphDesc = String
 
 newtype HtmlMarkup a = HtmlMarkup {
-    unHtmlMarkup :: StateT HtmlMarkupState 
+    unHtmlMarkup :: StateT HtmlMarkupState
                       (ConsistentLabelsT GraphDesc GraphIdx Identity) a
   }
   deriving( Functor, Applicative, Monad )
@@ -342,7 +342,7 @@
 emptyHtmlMarkupState = HtmlMarkupState M.empty M.empty M.empty M.empty M.empty 0
 
 runHtmlMarkup :: HtmlMarkup a -> (a, (HtmlMarkupState, M.Map GraphDesc GraphIdx))
-runHtmlMarkup m = 
+runHtmlMarkup m =
   case runIdentity . flip runConsistentLabelsT [1..] .
        flip runStateT emptyHtmlMarkupState . unHtmlMarkup $ m of
     ((res, st), (_, sequentIdxs)) -> (res, (st, sequentIdxs))
@@ -382,5 +382,5 @@
 
   keyword tag d = withSpan [("class","kw-"++tag)] d
 
-  
+
 
diff --git a/src/Scyther/Typing.hs b/src/Scyther/Typing.hs
--- a/src/Scyther/Typing.hs
+++ b/src/Scyther/Typing.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeSynonymInstances, DeriveDataTypeable, FlexibleInstances #-}
+{-# LANGUAGE TypeSynonymInstances, DeriveDataTypeable, FlexibleInstances, FlexibleContexts #-}
 -- | Building typing invariants for security protocol in order to enable
 -- verification in an untyped model.
 module Scyther.Typing (
@@ -38,7 +38,7 @@
 
 
 data Type =
-    AgentT 
+    AgentT
   | ConstT Id
   | NonceT Role Id
   | HashT Type
@@ -51,7 +51,7 @@
   | SumT Type Type
   deriving( Eq, Ord, Show, Data, Typeable )
 
--- | Partial normalization: rewrites with 
+-- | Partial normalization: rewrites with
 --
 -- > SumT ty (KnownT _) = SumT (KnownT _) ty
 --
@@ -82,11 +82,11 @@
 
 -- | The TIDs of a type annotation.
 typeAnnTIDs :: TypeAnn -> [TID]
-typeAnnTIDs (m, _, tid) = tid : msgTIDs m 
+typeAnnTIDs (m, _, tid) = tid : msgTIDs m
 
 -- | The AMIDs of a type annotation.
 typeAnnAMIDs :: TypeAnn -> [ArbMsgId]
-typeAnnAMIDs (m, _, _) = msgAMIDs m 
+typeAnnAMIDs (m, _, _) = msgAMIDs m
 
 -- | Substitute a type annotation.
 substTypeAnn :: E.Equalities -> TypeAnn -> TypeAnn
@@ -105,7 +105,7 @@
 --
 -- FIXME: This is quite a hack and could be done much better: do it!
 mscTyping :: Protocol -> Maybe Typing
-mscTyping proto = 
+mscTyping proto =
     (`execStateT` M.empty) $ foldM typeStep E.empty steps
   where
     roleeqs = M.fromList $ zip [1..] (protoRoles proto)
@@ -247,13 +247,13 @@
     SumT ty1 ty2  -> parens (sep [go ty1 <-> text "|", go ty2])
 
 sptTypeAnn :: (TID -> Maybe Role) -> TypeAnn -> Doc
-sptTypeAnn tidToRole (m,ty,i) = hsep 
+sptTypeAnn tidToRole (m,ty,i) = hsep
     [sptMessage m, text "::", parens (sptType (tidToRole i) ty) <> sptTID i]
 
 sptTyping :: Typing -> Doc
-sptTyping = vcat . map ppTyEq . M.toList 
+sptTyping = vcat . map ppTyEq . M.toList
   where
-    ppTyEq ((v,role),ty) = 
+    ppTyEq ((v,role),ty) =
       sep [ text $ getId v ++ "@" ++ roleName role
           , nest 2 $ text "::" <-> sptType (Just role) ty ]
 
@@ -261,7 +261,7 @@
   isar conf = isaType conf Nothing
 
 instance Isar Typing where
-  isar conf = 
+  isar conf =
       ($$ rbrack) . vcat . zipWith (<->) seps . map ppTyEq . M.toList
     where
       seps = map char $ '[' : repeat ','
diff --git a/src/System/Isabelle.hs b/src/System/Isabelle.hs
--- a/src/System/Isabelle.hs
+++ b/src/System/Isabelle.hs
@@ -33,7 +33,7 @@
   let thyName     = takeBaseName thyFile
       rootName    = "ROOT"
       sessionName = "scyther-proof-" ++ thyName
-  
+
   -- setup temporary directory
   tmpDir <- createTempDirectory
   copyFile thyFile (tmpDir </> addExtension thyName "thy")
@@ -47,7 +47,7 @@
       removeDirectoryRecursive tmpDir
       return Nothing
     else
-      return (Just (errMsg out))        
+      return (Just (errMsg out))
   where
   -- | Extract the error message from the isabelle output
   errMsg str = case break ("***" `isPrefixOf`) (lines str) of
diff --git a/src/Text/Dot.hs b/src/Text/Dot.hs
--- a/src/Text/Dot.hs
+++ b/src/Text/Dot.hs
@@ -7,67 +7,67 @@
 -- Stability: unstable
 -- Portability: portable
 --
--- This module provides a simple interface for building .dot graph files, for input into the dot and graphviz tools. 
+-- This module provides a simple interface for building .dot graph files, for input into the dot and graphviz tools.
 -- It includes a monadic interface for building graphs.
 
-module Text.Dot 
-	( 
-	  -- * Dot
-	  Dot		-- abstract
-	  -- * Nodes
-	, node
-	, NodeId	-- abstract
-	, userNodeId
-	, userNode
-	  -- * Edges
-	, edge
-	  -- * Showing a graph
-	, showDot
-	  -- * Other combinators
-	, scope
-	, attribute
-	, nodeAttributes
-	, edgeAttributes
-	, graphAttributes
-	, share
-	, same
-	, cluster
-	  -- * Record specification
-	, Record       -- abstract
-	, field
-	, portField
-	, hcat
-	, hcat'
-	, vcat
-	, vcat'
-	  -- * Record node construction
-	, record
-	, record'
-	, record_
-	  
-	, mrecord
-	, mrecord'
-	, mrecord_
-	) where
+module Text.Dot
+        (
+          -- * Dot
+          Dot           -- abstract
+          -- * Nodes
+        , node
+        , NodeId        -- abstract
+        , userNodeId
+        , userNode
+          -- * Edges
+        , edge
+          -- * Showing a graph
+        , showDot
+          -- * Other combinators
+        , scope
+        , attribute
+        , nodeAttributes
+        , edgeAttributes
+        , graphAttributes
+        , share
+        , same
+        , cluster
+          -- * Record specification
+        , Record       -- abstract
+        , field
+        , portField
+        , hcat
+        , hcat'
+        , vcat
+        , vcat'
+          -- * Record node construction
+        , record
+        , record'
+        , record_
 
+        , mrecord
+        , mrecord'
+        , mrecord_
+        ) where
+
 import Data.List (intersperse)
 import Control.Applicative
 import Control.Monad (ap, liftM)
 
 data NodeId = NodeId String
-	    | UserNodeId Int
+            | UserNodeId Int
 
 instance Show NodeId where
   show (NodeId str) = str
-  show (UserNodeId i) 
-	| i < 0     = "u_" ++ show (negate i)
-	| otherwise = "u" ++ show i
+  show (UserNodeId i)
+        | i < 0     = "u_" ++ show (negate i)
+        | otherwise = "u" ++ show i
 
 data GraphElement = GraphAttribute String String
-		  | GraphNode NodeId        [(String,String)]
-		  | GraphEdge NodeId NodeId [(String,String)]
-		  | Scope           [GraphElement]
-		  | SubGraph NodeId [GraphElement]
+                  | GraphNode NodeId        [(String,String)]
+                  | GraphEdge NodeId NodeId [(String,String)]
+                  | Scope           [GraphElement]
+                  | SubGraph NodeId [GraphElement]
 
 data Dot a = Dot { unDot :: Int -> ([GraphElement],Int,a) }
 
@@ -81,20 +81,20 @@
 instance Monad Dot where
   return a = Dot $ \ uq -> ([],uq,a)
   m >>= k  = Dot $ \ uq -> case unDot m uq of
-			   (g1,uq',r) -> case unDot (k r) uq' of
-					   (g2,uq2,r2) -> (g1 ++ g2,uq2,r2)
+                           (g1,uq',r) -> case unDot (k r) uq' of
+                                           (g2,uq2,r2) -> (g1 ++ g2,uq2,r2)
 
 -- | 'node' takes a list of attributes, generates a new node, and gives a 'NodeId'.
 node      :: [(String,String)] -> Dot NodeId
-node attrs = Dot $ \ uq -> let nid = NodeId $ "n" ++ show uq 
-			  in ( [ GraphNode nid attrs ],succ uq,nid)
+node attrs = Dot $ \ uq -> let nid = NodeId $ "n" ++ show uq
+                          in ( [ GraphNode nid attrs ],succ uq,nid)
 
 
 -- | 'userNodeId' allows a user to use their own (Int-based) node id's, without needing to remap them.
 userNodeId :: Int -> NodeId
 userNodeId i = UserNodeId i
 
--- | 'userNode' takes a NodeId, and adds some attributes to that node. 
+-- | 'userNode' takes a NodeId, and adds some attributes to that node.
 userNode :: NodeId -> [(String,String)] -> Dot ()
 userNode nId attrs = Dot $ \ uq -> ( [GraphNode nId attrs ],uq,())
 
@@ -105,14 +105,14 @@
 -- | 'scope' groups a subgraph together; in dot these are the subgraphs inside "{" and "}".
 scope     :: Dot a -> Dot a
 scope (Dot fn) = Dot (\ uq -> case fn uq of
-			      ( elems,uq',a) -> ([Scope elems],uq',a))
+                              ( elems,uq',a) -> ([Scope elems],uq',a))
 
 -- | 'share' is when a set of nodes share specific attributes. Usually used for layout tweaking.
 share :: [(String,String)] -> [NodeId] -> Dot ()
-share attrs nodeids = Dot $ \ uq -> 
+share attrs nodeids = Dot $ \ uq ->
       ( [ Scope ( [ GraphAttribute name val | (name,val) <- attrs]
-	       ++ [ GraphNode nodeid [] | nodeid <- nodeids ]
-	       ) 
+               ++ [ GraphNode nodeid [] | nodeid <- nodeids ]
+               )
         ], uq, ())
 
 -- | 'same' provides a combinator for a common pattern; a set of 'NodeId's with the same rank.
@@ -120,12 +120,12 @@
 same = share [("rank","same")]
 
 
--- | 'cluster' builds an explicit, internally named subgraph (called cluster). 
+-- | 'cluster' builds an explicit, internally named subgraph (called cluster).
 cluster :: Dot a -> Dot (NodeId,a)
-cluster (Dot fn) = Dot (\ uq -> 
-		let cid = NodeId $ "cluster_" ++ show uq 
-		in case fn (succ uq) of
-		    (elems,uq',a) -> ([SubGraph cid elems],uq',(cid,a)))
+cluster (Dot fn) = Dot (\ uq ->
+                let cid = NodeId $ "cluster_" ++ show uq
+                in case fn (succ uq) of
+                    (elems,uq',a) -> ([SubGraph cid elems],uq',(cid,a)))
 
 -- | 'attribute' gives a attribute to the current scope.
 attribute :: (String,String) -> Dot ()
@@ -147,7 +147,7 @@
 -- 'showDot' renders a dot graph as a 'String'.
 showDot :: Dot a -> String
 showDot (Dot dm) = case dm 0 of
-		    (elems,_,_) -> "digraph G {\n" ++ unlines (map showGraphElement elems) ++ "\n}\n"
+                    (elems,_,_) -> "digraph G {\n" ++ unlines (map showGraphElement elems) ++ "\n}\n"
 
 showGraphElement :: GraphElement -> String
 showGraphElement (GraphAttribute name val) = showAttr (name,val) ++ ";"
@@ -160,16 +160,16 @@
 showAttrs [] = ""
 showAttrs xs = "[" ++ showAttrs' xs ++ "]"
     where
-	-- never empty list
-	showAttrs' [a]    = showAttr a
-	showAttrs' (a:as) = showAttr a ++ "," ++ showAttrs' as
+        -- never empty list
+        showAttrs' [a]    = showAttr a
+        showAttrs' (a:as) = showAttr a ++ "," ++ showAttrs' as
         showAttrs' []     = error "showAttrs: the impossible happended"
 
 showAttr :: (String, String) -> String
 showAttr (name,val) = name ++ "=\"" ++ concatMap escape val ++ "\""
     where escape '\n' = "\\l"
-	  escape '"'  = "\\\""
-	  escape c    = [c]
+          escape '"'  = "\\\""
+          escape c    = [c]
 
 
 ------------------------------------------------------------------------------
@@ -220,10 +220,10 @@
 renderRecord = render True
   where
   render _ (Field Nothing l) = return (escape l, const [])
-  render _ (Field (Just p) l) = 
+  render _ (Field (Just p) l) =
     Dot $ \uq -> let pid = "n" ++ show uq
                      lbl = "<"++pid++"> "++escape l
-		 in  ([], succ uq, (lbl, \nId -> [(p,NodeId (show nId++":"++pid))]))
+                 in  ([], succ uq, (lbl, \nId -> [(p,NodeId (show nId++":"++pid))]))
   render horiz (HCat rs) = do
     (lbls, ids) <- liftM unzip $ mapM (render True) rs
     let rawLbl = concat (intersperse "|" lbls)
diff --git a/src/Text/PrettyPrint/Class.hs b/src/Text/PrettyPrint/Class.hs
--- a/src/Text/PrettyPrint/Class.hs
+++ b/src/Text/PrettyPrint/Class.hs
@@ -11,7 +11,7 @@
      ,  P.Mode(..)
 
      , ($--$)
-     , semi 
+     , semi
      , colon
      , comma
      , space
@@ -22,7 +22,7 @@
      , rbrack
      , lbrace
      , rbrace
-  
+
      , int
      , integer
      , float
@@ -33,7 +33,7 @@
      , parens
      , brackets
      , braces
-  
+
      , hang
      , punctuate
 ) where
@@ -41,7 +41,7 @@
 import Prelude
 import qualified Text.PrettyPrint.HughesPJ as P
 
-infixl 6 <> 
+infixl 6 <>
 infixl 6 <->
 infixl 5 $$, $-$, $--$
 
@@ -85,10 +85,10 @@
 
 -- | Vertical concatentation of two documents with an empty line in between.
 ($--$) :: Document d => d -> d -> d
-d1 $--$ d2 = 
+d1 $--$ d2 =
    caseEmptyDoc d2 (caseEmptyDoc d1 (d1 $-$ text "" $-$ d2) d2) d1
 
-semi, colon, comma, space, equals, 
+semi, colon, comma, space, equals,
   lparen, rparen, lbrack, rbrack, lbrace, rbrace :: Document d => d
 
 semi  = char ';'
