packages feed

bindings-bfd 1.0.0 → 1.2.0.0

raw patch · 19 files changed

+1124/−691 lines, 19 filesdep ~arraydep ~basedep ~containers

Dependency ranges changed: array, base, containers, unix

Files

bindings-bfd.cabal view
@@ -1,10 +1,10 @@ name:                   bindings-bfd-version:                1.0.0+version:                1.2.0.0 cabal-version:          >= 1.4 build-type:             Simple license:                LGPL-3 license-file:           LICENSE-copyright:              (c) 2009,2010,2011 Mick Nelso+copyright:              (c) 2009-2012 Mick Nelso author:                 Mick Nelso maintainer:             mcnster@gmail.com stability:              alpha@@ -15,11 +15,11 @@ description:            These are bindings for `libbfd', a library of the GNU                         `binutils' package.  The bindings let a Haskell program                         query the structure of any executable, object, or -                        library file format supported by the GNU Project (alot).+                        library file format supported by the GNU Project (many).                         It also has support for disassembly of code in these                         files where available. category:               FFI, Development-tested-with:            GHC==7.0.3+tested-with:            GHC==7.0.4 extra-source-files:     README,                         LICENSE,                         TODO,@@ -30,6 +30,7 @@    exposed-modules:     Bindings.Bfd                         Bindings.Bfd.Disasm                         Bindings.Bfd.Disasm.I386.Address+                        Bindings.Bfd.Disasm.I386.Cell                         Bindings.Bfd.Disasm.I386.CondCode                         Bindings.Bfd.Disasm.I386.EffectiveAddr                         Bindings.Bfd.Disasm.I386.Insn@@ -40,6 +41,7 @@                         Bindings.Bfd.Disasm.I386.Parse                         Bindings.Bfd.Disasm.I386.Precision                         Bindings.Bfd.Disasm.I386.Prefix+                        Bindings.Bfd.Disasm.I386.Register                         Bindings.Bfd.Disasm.I386.Term                         Bindings.Bfd.Disasm.I386.XmmType                         Bindings.Bfd.Disasm.Info@@ -58,10 +60,10 @@                         Bindings.Bfd.Symbol.Flags                         Bindings.Bfd.SymbolTable                         Bindings.Bfd.Target-   build-depends:       array >= 0.3 && < 1,-                        base >= 4.1.0.0 && < 5,-                        containers >= 0.2.0.1 && < 1,-                        unix >= 2.3.2.0 && < 3+   build-depends:       array >= 0.3 && < 0.4,+                        base >= 4.3 && < 4.4,+                        containers >= 0.4 && < 0.5,+                        unix >= 2.4 && < 2.5    hs-source-dirs:      src    extensions:          CPP,                          ForeignFunctionInterface
dist/build/Bindings/Bfd/Disasm/I386/Lex.hs view
@@ -28,7 +28,6 @@ #endif {-# LINE 1 "templates/wrappers.hs" #-} {-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 1 "templates/wrappers.hs" #-} -- -----------------------------------------------------------------------------@@ -120,19 +119,19 @@ -- For compatibility with previous versions of Alex, and because we can.  alex_base :: AlexAddr-alex_base = AlexA# "\xf6\xff\xff\xff\xfc\xff\xff\xff\x00\x00\x00\x00\xdc\xff\xff\xff\x43\x00\x00\x00\x5d\x00\x00\x00\xaa\x00\x00\x00\xc4\x00\x00\x00\x1f\x01\x00\x00\x10\x01\x00\x00\x6c\x01\x00\x00\x86\x01\x00\x00\x92\x01\x00\x00\xd4\xff\xff\xff\x8d\xff\xff\xff\xdf\x01\x00\x00\xf9\x01\x00\x00\x44\x02\x00\x00\x4e\x02\x00\x00\xd6\xff\xff\xff\x93\xff\xff\xff\x58\x02\x00\x00\x62\x02\x00\x00\xe7\xff\xff\xff\xa0\xff\xff\xff\x99\x02\x00\x00\xb3\x02\x00\x00\x00\x03\x00\x00\x1a\x03\x00\x00\x67\x03\x00\x00\x81\x03\x00\x00\xcc\x03\x00\x00\xe6\x03\x00\x00\x33\x04\x00\x00\x4d\x04\x00\x00\xa8\x04\x00\x00\xc2\x04\x00\x00\x0d\x05\x00\x00\x27\x05\x00\x00\x72\x05\x00\x00\x8c\x05\x00\x00\xd9\x05\x00\x00\xf3\x05\x00\x00\x3e\x06\x00\x00\x58\x06\x00\x00\xab\x06\x00\x00\xc5\x06\x00\x00\xfd\xff\xff\xff\xc9\xff\xff\xff\x00\x00\x00\x00\xc2\xff\xff\xff\xc4\xff\xff\xff\xcd\xff\xff\xff\x09\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x4d\x00\x00\x00\x18\x07\x00\x00\x32\x07\x00\x00\x7f\x07\x00\x00\x00\x00\x00\x00\xc3\xff\xff\xff\x00\x00\x00\x00\xd3\xff\xff\xff\xd7\xff\xff\xff\xd5\xff\xff\xff\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+alex_base = AlexA# "\xf6\xff\xff\xff\xfc\xff\xff\xff\x00\x00\x00\x00\x10\x00\x00\x00\x5f\x00\x00\x00\x79\x00\x00\x00\xc8\x00\x00\x00\xe2\x00\x00\x00\x3d\x01\x00\x00\x2e\x01\x00\x00\x8c\x01\x00\x00\xa6\x01\x00\x00\xe1\x01\x00\x00\xd4\xff\xff\xff\x8d\xff\xff\xff\xfb\x01\x00\x00\x4a\x02\x00\x00\x64\x02\x00\x00\x6e\x02\x00\x00\xd6\xff\xff\xff\x92\xff\xff\xff\xa5\x02\x00\x00\xaf\x02\x00\x00\xdb\xff\xff\xff\x94\xff\xff\xff\xb9\x02\x00\x00\x04\x03\x00\x00\x1e\x03\x00\x00\x6d\x03\x00\x00\x87\x03\x00\x00\xe2\x03\x00\x00\xfc\x03\x00\x00\x47\x04\x00\x00\x61\x04\x00\x00\xb0\x04\x00\x00\xca\x04\x00\x00\x15\x05\x00\x00\x2f\x05\x00\x00\x8a\x05\x00\x00\xa4\x05\x00\x00\xef\x05\x00\x00\x09\x06\x00\x00\x64\x06\x00\x00\x7e\x06\x00\x00\xc9\x06\x00\x00\xe3\x06\x00\x00\x3e\x07\x00\x00\xed\xff\xff\xff\xbf\xff\xff\xff\x00\x00\x00\x00\xac\xff\xff\xff\xae\xff\xff\xff\xad\xff\xff\xff\xe7\xff\xff\xff\x00\x00\x00\x00\xe9\xff\xff\xff\x1a\x00\x00\x00\x58\x07\x00\x00\xa3\x07\x00\x00\xbd\x07\x00\x00\x00\x00\x00\x00\xa0\xff\xff\xff\x00\x00\x00\x00\xa4\xff\xff\xff\xc3\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb3\xff\xff\xff\xb7\xff\xff\xff\xb9\xff\xff\xff\xf8\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x01\x00\x01\x00\x01\x00\x0e\x00\x0b\x00\x14\x00\x01\x00\x01\x00\x01\x00\x3d\x00\x12\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x01\x00\x18\x00\x16\x00\x46\x00\x13\x00\x3a\x00\x01\x00\x2c\x00\x3f\x00\x43\x00\x47\x00\x2f\x00\x44\x00\x0d\x00\x33\x00\x34\x00\x0f\x00\x10\x00\x10\x00\x3b\x00\x10\x00\x3b\x00\x3b\x00\x3b\x00\x10\x00\x3b\x00\x45\x00\x35\x00\x31\x00\x36\x00\x17\x00\x40\x00\x3c\x00\x3e\x00\x41\x00\x42\x00\x00\x00\x00\x00\x3c\x00\x04\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\x03\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x21\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\x05\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x06\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x07\x00\x3b\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x08\x00\x3b\x00\x3b\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\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\x02\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\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\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\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\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\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\x0c\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\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\x1c\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\x1d\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1e\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\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\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\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\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\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x22\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\x23\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2e\x00\x3b\x00\x3b\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x29\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\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\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\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\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\x2a\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\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\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\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+alex_table = AlexA# "\x00\x00\x01\x00\x01\x00\x01\x00\x0e\x00\x0b\x00\x14\x00\x01\x00\x01\x00\x01\x00\x12\x00\x18\x00\x16\x00\x2c\x00\x33\x00\x34\x00\x31\x00\x35\x00\x36\x00\x3c\x00\x40\x00\x44\x00\x01\x00\x2f\x00\x45\x00\x4a\x00\x13\x00\x3a\x00\x01\x00\x46\x00\x43\x00\x47\x00\x4b\x00\x42\x00\x48\x00\x0d\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x10\x00\x3b\x00\x10\x00\x3b\x00\x3b\x00\x3b\x00\x10\x00\x3b\x00\x49\x00\x41\x00\x3c\x00\x00\x00\x17\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x37\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x03\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x21\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x04\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\x05\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x06\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x07\x00\x3b\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x08\x00\x3b\x00\x3b\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\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\x02\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\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\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\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\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\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\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x09\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\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\x0c\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\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\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\x00\x19\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\x1c\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3b\x00\x3b\x00\x1d\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\x1e\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\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\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\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\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x1f\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x22\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\x23\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x2e\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\x29\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\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\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\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\x2a\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2b\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x30\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\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\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x00\x00\x3d\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\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\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\x39\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x0b\x00\x0c\x00\x0d\x00\x30\x00\x78\x00\x30\x00\x0b\x00\x0c\x00\x0d\x00\x2e\x00\x78\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x30\x00\x78\x00\x23\x00\x24\x00\x25\x00\x20\x00\x20\x00\x28\x00\x29\x00\x2a\x00\x58\x00\x2c\x00\x2d\x00\x62\x00\x61\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x64\x00\x29\x00\x29\x00\x3e\x00\x62\x00\x73\x00\x29\x00\x61\x00\x64\x00\xff\xff\xff\xff\x73\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_check = AlexA# "\xff\xff\x0b\x00\x0c\x00\x0d\x00\x30\x00\x78\x00\x30\x00\x0b\x00\x0c\x00\x0d\x00\x78\x00\x30\x00\x78\x00\x20\x00\x62\x00\x61\x00\x29\x00\x64\x00\x29\x00\x73\x00\x70\x00\x62\x00\x20\x00\x58\x00\x61\x00\x23\x00\x24\x00\x25\x00\x20\x00\x64\x00\x28\x00\x29\x00\x2a\x00\x29\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x6e\x00\x73\x00\xff\xff\x3e\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\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\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\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\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\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\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#  alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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 = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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,71) [[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[],[],[],[(AlexAcc (alex_action_5))],[],[],[],[(AlexAcc (alex_action_6))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_10))],[],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_11))],[],[],[],[],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[(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))]]-{-# LINE 42 "src/Bindings/Bfd/Disasm/I386/Lex.x" #-}+alex_accept = listArray (0::Int,75) [[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_2))],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[],[],[],[(AlexAcc (alex_action_5))],[],[],[],[(AlexAcc (alex_action_6))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_7))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_8))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_10))],[],[],[(AlexAcc (alex_action_14))],[],[],[(AlexAcc (alex_action_11))],[],[],[],[],[(AlexAcc (alex_action_12))],[],[],[(AlexAcc (alex_action_13))],[],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_14))],[],[(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))]]+{-# LINE 44 "src/Bindings/Bfd/Disasm/I386/Lex.x" #-}  data Token = Offset           Int            | Constant         Int@@ -181,15 +180,16 @@ alex_action_13 =  register          alex_action_14 =  mnemonic          alex_action_15 =  mnemonic         -alex_action_16 =  parensL          -alex_action_17 =  parensR          -alex_action_18 =  comma            -alex_action_19 =  colon            -alex_action_20 =  hash             -alex_action_21 =  star             +alex_action_16 =  mnemonic         +alex_action_17 =  mnemonic         +alex_action_18 =  parensL          +alex_action_19 =  parensR          +alex_action_20 =  comma            +alex_action_21 =  colon            +alex_action_22 =  hash             +alex_action_23 =  star              {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- -----------------------------------------------------------------------------
dist/build/Bindings/Bfd/Disasm/I386/Parse.hs view
@@ -15,6 +15,7 @@ import Bindings.Bfd.Disasm.I386.Mnemonic       as R import Bindings.Bfd.Disasm.I386.Operand        as O import Bindings.Bfd.Disasm.I386.Prefix+import Bindings.Bfd.Disasm.I386.Register import qualified Data.Array as Happy_Data_Array import qualified GHC.Exts as Happy_GHC_Exts @@ -92,6 +93,12 @@ happyOut14 :: (HappyAbsSyn ) -> (EffectiveAddr) happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x {-# INLINE happyOut14 #-}+happyIn15 :: (Register) -> (HappyAbsSyn )+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> (Register)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-} happyInTok :: (Token) -> (HappyAbsSyn ) happyInTok x = Happy_GHC_Exts.unsafeCoerce# x {-# INLINE happyInTok #-}@@ -101,21 +108,21 @@   happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x3f\x00\x59\x00\x01\x00\x55\x00\x01\x00\x00\x00\x00\x00\x57\x00\x56\x00\x00\x00\x31\x00\x53\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x52\x00\x26\x00\x23\x00\x00\x00\x00\x00\x00\x00\x39\x00\x54\x00\x2a\x00\x00\x00\x00\x00\x51\x00\x00\x00\x21\x00\x04\x00\x21\x00\x50\x00\x2c\x00\x00\x00\x00\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x4b\x00\x49\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x48\x00\x48\x00\x00\x00\x00\x00\x41\x00\x45\x00\x4a\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+happyActOffsets = HappyA# "\x44\x00\x61\x00\x01\x00\x5e\x00\x01\x00\x00\x00\x00\x00\x5f\x00\x5d\x00\x00\x00\x22\x00\x5c\x00\x00\x00\x00\x00\x5a\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x37\x00\x33\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x57\x00\x00\x00\x3b\x00\x00\x00\x59\x00\x00\x00\x33\x00\x04\x00\x33\x00\x58\x00\x1b\x00\x00\x00\x00\x00\x55\x00\x55\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x54\x00\x4f\x00\x56\x00\x00\x00\x00\x00\x00\x00\x50\x00\x50\x00\x00\x00\x00\x00\x47\x00\x4d\x00\x53\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x3b\x00\x00\x00\x15\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\x46\x00\x00\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x1c\x00\x29\x00\x00\x00\x44\x00\x00\x00\x00\x00\x43\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x12\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+happyGotoOffsets = HappyA# "\x51\x00\x00\x00\x16\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x4c\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x42\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x1e\x00\x25\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x49\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x00\x2d\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x00\x00\x00\x00\xfc\xff\x00\x00\xfc\xff\xfd\xff\xfb\xff\xfa\xff\xf9\xff\xf8\xff\xec\xff\xec\xff\xe6\xff\xe2\xff\xe1\xff\xe9\xff\xea\xff\xe8\xff\x00\x00\x00\x00\xfe\xff\xe4\xff\xe7\xff\x00\x00\x00\x00\x00\x00\xe3\xff\xf6\xff\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\xf0\xff\xec\xff\xf3\xff\xf5\xff\xec\xff\xec\xff\xf1\xff\xeb\xff\xe5\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\xf2\xff\xf4\xff\xef\xff\x00\x00\x00\x00\xee\xff\xe8\xff\xec\xff\x00\x00\x00\x00\x00\x00\xdf\xff\xed\xff\xde\xff"#+happyDefActions = HappyA# "\x00\x00\x00\x00\xfc\xff\x00\x00\xfc\xff\xfd\xff\xfb\xff\xfa\xff\xf9\xff\xf8\xff\xec\xff\xec\xff\xe6\xff\xe2\xff\xe8\xff\xe1\xff\xe9\xff\xea\xff\xdd\xff\x00\x00\x00\x00\xfe\xff\xe4\xff\xe7\xff\x00\x00\x00\x00\xe3\xff\x00\x00\xf6\xff\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\xf0\xff\xec\xff\xf3\xff\xf5\xff\xec\xff\xec\xff\xf1\xff\xeb\xff\xe5\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\xf2\xff\xf4\xff\xef\xff\x00\x00\x00\x00\xee\xff\xe8\xff\xec\xff\x00\x00\x00\x00\x00\x00\xdf\xff\xed\xff\xde\xff"#  happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x02\x00\x03\x00\x01\x00\x02\x00\x06\x00\x07\x00\x02\x00\x06\x00\x07\x00\x01\x00\x0c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x01\x00\x05\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x04\x00\x05\x00\x01\x00\x07\x00\x01\x00\x09\x00\x0a\x00\x06\x00\x07\x00\x06\x00\x07\x00\x01\x00\x06\x00\x05\x00\x05\x00\x09\x00\x07\x00\x07\x00\x09\x00\x0a\x00\x05\x00\x09\x00\x07\x00\x0b\x00\x09\x00\x0a\x00\x09\x00\x00\x00\x0b\x00\x09\x00\x0a\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x04\x00\x05\x00\x02\x00\x02\x00\x0a\x00\x02\x00\x02\x00\x08\x00\x01\x00\x0b\x00\x08\x00\x06\x00\x01\x00\xff\xff\x06\x00\x09\x00\xff\xff\x03\x00\x09\x00\x07\x00\xff\xff\x0b\x00\x09\x00\x06\x00\xff\xff\x0a\x00\x04\x00\x0b\x00\x09\x00\x09\x00\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff"#+happyCheck = HappyA# "\xff\xff\x02\x00\x01\x00\x02\x00\x03\x00\x01\x00\x02\x00\x06\x00\x07\x00\x0b\x00\x06\x00\x07\x00\x01\x00\x0c\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x01\x00\x0b\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x04\x00\x05\x00\x09\x00\x07\x00\x0b\x00\x09\x00\x0a\x00\x0b\x00\x05\x00\x09\x00\x07\x00\x0b\x00\x09\x00\x0a\x00\x0b\x00\x05\x00\x05\x00\x07\x00\x01\x00\x09\x00\x0a\x00\x0b\x00\x0b\x00\x06\x00\x07\x00\x05\x00\x01\x00\x06\x00\x09\x00\x0a\x00\x09\x00\x0b\x00\x07\x00\x09\x00\x0a\x00\x0b\x00\x08\x00\x09\x00\x04\x00\x05\x00\x02\x00\x02\x00\x02\x00\x0b\x00\x02\x00\x0a\x00\x02\x00\x00\x00\x0b\x00\x08\x00\x01\x00\x08\x00\x06\x00\x01\x00\x09\x00\xff\xff\x06\x00\x09\x00\x03\x00\x06\x00\xff\xff\xff\xff\x0b\x00\x09\x00\x07\x00\xff\xff\x0a\x00\x04\x00\x09\x00\x0b\x00\x09\x00\xff\xff\xff\xff\x0d\x00\xff\xff\xff\xff\xff\xff"#  happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x3b\x00\x0f\x00\x10\x00\x11\x00\x0f\x00\x10\x00\x12\x00\x13\x00\x2f\x00\x12\x00\x13\x00\x05\x00\x14\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x14\x00\x34\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x23\x00\x24\x00\x0f\x00\x25\x00\x0f\x00\x0c\x00\x0d\x00\x12\x00\x13\x00\x17\x00\x13\x00\x0f\x00\x18\x00\x36\x00\x21\x00\x19\x00\x22\x00\x13\x00\x0c\x00\x0d\x00\x26\x00\x33\x00\x27\x00\x1d\x00\x0c\x00\x0d\x00\x1f\x00\x03\x00\x1d\x00\x29\x00\x0d\x00\x15\x00\x0d\x00\x2c\x00\x2d\x00\x03\x00\x05\x00\x30\x00\x31\x00\x1a\x00\x1b\x00\x1d\x00\x3d\x00\x3a\x00\x1d\x00\x3b\x00\x36\x00\x38\x00\x00\x00\x2e\x00\x39\x00\x00\x00\x29\x00\x2f\x00\x13\x00\x00\x00\x1d\x00\x34\x00\x2b\x00\x00\x00\x1a\x00\x03\x00\x1d\x00\x20\x00\x21\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00"#+happyTable = HappyA# "\x00\x00\x3c\x00\x10\x00\x11\x00\x12\x00\x10\x00\x11\x00\x13\x00\x14\x00\x2e\x00\x13\x00\x14\x00\x05\x00\x15\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x15\x00\x2b\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x24\x00\x25\x00\x34\x00\x26\x00\x1e\x00\x0c\x00\x0d\x00\x0e\x00\x22\x00\x20\x00\x23\x00\x1e\x00\x0c\x00\x0d\x00\x0e\x00\x27\x00\x35\x00\x28\x00\x10\x00\x0c\x00\x0d\x00\x0e\x00\x36\x00\x13\x00\x14\x00\x37\x00\x10\x00\x13\x00\x2a\x00\x0d\x00\x1a\x00\x36\x00\x14\x00\x16\x00\x0d\x00\x17\x00\x2d\x00\x2e\x00\x03\x00\x05\x00\x30\x00\x31\x00\x32\x00\x18\x00\x1c\x00\x1a\x00\x1e\x00\x03\x00\x1e\x00\x3e\x00\x3b\x00\x3c\x00\x13\x00\x39\x00\x3a\x00\x00\x00\x13\x00\x30\x00\x2a\x00\x13\x00\x00\x00\x00\x00\x1e\x00\x35\x00\x14\x00\x00\x00\x1c\x00\x03\x00\x21\x00\x1e\x00\x22\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00"# -happyReduceArr = Happy_Data_Array.array (1, 33) [+happyReduceArr = Happy_Data_Array.array (1, 34) [ 	(1 , happyReduce_1), 	(2 , happyReduce_2), 	(3 , happyReduce_3),@@ -148,11 +155,12 @@ 	(30 , happyReduce_30), 	(31 , happyReduce_31), 	(32 , happyReduce_32),-	(33 , happyReduce_33)+	(33 , happyReduce_33),+	(34 , happyReduce_34) 	]  happy_n_terms = 14 :: Int-happy_n_nonterms = 11 :: Int+happy_n_nonterms = 12 :: Int  happyReduce_1 = happySpecReduce_2  0# happyReduction_1 happyReduction_1 happy_x_2@@ -160,7 +168,7 @@ 	 =  case happyOutTok happy_x_1 of { (PrefixedMnemonic happy_var_1) ->  	case happyOut5 happy_x_2 of { happy_var_2 ->  	happyIn4-		 (Insn (toPrefix $ head happy_var_1) (toMnemonic $ head $ tail happy_var_1) happy_var_2+		 (Insn 0 (toPrefix $ head happy_var_1) (toMnemonic $ head $ tail happy_var_1) happy_var_2 	)}}  happyReduce_2 = happySpecReduce_2  0# happyReduction_2@@ -169,7 +177,7 @@ 	 =  case happyOutTok happy_x_1 of { (L.Mnemonic       happy_var_1) ->  	case happyOut5 happy_x_2 of { happy_var_2 ->  	happyIn4-		 (Insn (Nothing           ) (toMnemonic               happy_var_1) happy_var_2+		 (Insn 0 (Nothing           ) (toMnemonic               happy_var_1) happy_var_2 	)}}  happyReduce_3 = happySpecReduce_0  1# happyReduction_3@@ -360,7 +368,7 @@  happyReduce_23 = happySpecReduce_1  5# happyReduction_23 happyReduction_23 happy_x_1-	 =  case happyOutTok happy_x_1 of { (Register         happy_var_1) -> +	 =  case happyOut15 happy_x_1 of { happy_var_1 ->  	happyIn9 		 (DirD happy_var_1 	)}@@ -368,7 +376,7 @@ happyReduce_24 = happySpecReduce_2  6# happyReduction_24 happyReduction_24 happy_x_2 	happy_x_1-	 =  case happyOutTok happy_x_2 of { (Register         happy_var_2) -> +	 =  case happyOut15 happy_x_2 of { happy_var_2 ->  	happyIn10 		 (DirJ happy_var_2 	)}@@ -377,17 +385,17 @@ happyReduction_25 happy_x_1 	 =  case happyOut13 happy_x_1 of { happy_var_1 ->  	happyIn11-		 (IndD "" (fst happy_var_1) (snd happy_var_1) Nothing+		 (IndD Nothing   (fst happy_var_1) (snd happy_var_1) Nothing 	)}  happyReduce_26 = happySpecReduce_3  7# happyReduction_26 happyReduction_26 happy_x_3 	happy_x_2 	happy_x_1-	 =  case happyOutTok happy_x_1 of { (Register         happy_var_1) -> +	 =  case happyOut15 happy_x_1 of { happy_var_1 ->  	case happyOut13 happy_x_3 of { happy_var_3 ->  	happyIn11-		 (IndD happy_var_1 (fst happy_var_3) (snd happy_var_3) Nothing+		 (IndD (Just happy_var_1) (fst happy_var_3) (snd happy_var_3) Nothing 	)}}  happyReduce_27 = happySpecReduce_2  8# happyReduction_27@@ -425,9 +433,9 @@ happyReduction_31 happy_x_3 	happy_x_2 	happy_x_1-	 =  case happyOutTok happy_x_2 of { (Register         happy_var_2) -> +	 =  case happyOut15 happy_x_2 of { happy_var_2 ->  	happyIn14-		 (EA happy_var_2 ""  1+		 (EA (Just happy_var_2) Nothing    1 	)}  happyReduce_32 = happyReduce 6# 10# happyReduction_32@@ -438,10 +446,10 @@ 	happy_x_2 `HappyStk` 	happy_x_1 `HappyStk` 	happyRest)-	 = case happyOutTok happy_x_3 of { (Register         happy_var_3) -> +	 = case happyOut15 happy_x_3 of { happy_var_3 ->  	case happyOutTok happy_x_5 of { (Offset           happy_var_5) ->  	happyIn14-		 (EA "" happy_var_3 happy_var_5+		 (EA Nothing   (Just happy_var_3) happy_var_5 	) `HappyStk` happyRest}}  happyReduce_33 = happyReduce 7# 10# happyReduction_33@@ -453,13 +461,20 @@ 	happy_x_2 `HappyStk` 	happy_x_1 `HappyStk` 	happyRest)-	 = case happyOutTok happy_x_2 of { (Register         happy_var_2) -> -	case happyOutTok happy_x_4 of { (Register         happy_var_4) -> +	 = case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut15 happy_x_4 of { happy_var_4 ->  	case happyOutTok happy_x_6 of { (Offset           happy_var_6) ->  	happyIn14-		 (EA happy_var_2 happy_var_4 happy_var_6+		 (EA (Just happy_var_2) (Just happy_var_4) happy_var_6 	) `HappyStk` happyRest}}} +happyReduce_34 = happySpecReduce_1  11# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOutTok happy_x_1 of { (Register         happy_var_1) -> +	happyIn15+		 (toRegister happy_var_1+	)}+ happyNewToken action sts stk [] = 	happyDoAction 13# notHappyAtAll action sts stk [] @@ -511,7 +526,6 @@ happyError tks = error $ "Parse.y: parse error at: " ++ (show $ take 10 tks) {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} -- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
src/Bindings/Bfd.hs-boot view
@@ -16,20 +16,23 @@ -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.  module Bindings.Bfd (-     Bfd(ptr)+     Bfd (ptr)    , Bfd'-   , Bindings.Bfd.mk+   , getPrintSymbol    , getOctetsPerByte    , getTarget    , getSections+   , mk  ) where -import Foreign.C-import Foreign.Ptr-import Foreign.Storable+import Foreign.C        ( CString )+import Foreign.Ptr      ( Ptr )+import Foreign.Storable ( Storable ) -import {-# SOURCE #-} Bindings.Bfd.Section-import {-# SOURCE #-} Bindings.Bfd.Target+import                Bindings.Bfd.Misc    ( File )+import {-# SOURCE #-} Bindings.Bfd.Section ( Section )+import {-# SOURCE #-} Bindings.Bfd.Symbol  ( Symbol )+import {-# SOURCE #-} Bindings.Bfd.Target  ( Target )   data Bfd = Bfd {@@ -47,9 +50,11 @@ instance Storable Bfd'  -mk-   :: Ptr Bfd'-   -> Bfd+getPrintSymbol+   :: Bfd+   -> File+   -> Symbol+   -> IO (IO ())  getOctetsPerByte    :: Bfd@@ -62,4 +67,8 @@ getSections    :: Bfd    -> IO [Section]++mk+   :: Ptr Bfd'+   -> Bfd 
src/Bindings/Bfd.hsc view
@@ -16,13 +16,15 @@ -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>.  -- | This is the top-level module containing operations that can be performed--- on a Binary Format Descriptor (BFD).  A BFD is opened on the binary file--- to be queried\/manipulated and serves an opaque pointer. +-- on a Binary Format Descriptor (BFD).  One BFD is opened for every binary file+-- to be queried\/manipulated and serves an opaque handle.  The usual workflow+-- is to 'open' a binary file (returning a 'Bfd'), perform operations on the+-- 'Bfd' handle, then 'close' the 'Bfd'.   module Bindings.Bfd (    -- * Types      Bfd (ptr)-   -- * Initialization+   -- * Library Initialization    , initialize    -- * File Operations    , targetsAndFormats@@ -59,6 +61,7 @@    , getDynamicRelocations    -- *    , demangle+   , getPrintSymbol    -- * Internal    , Bfd'    , Bindings.Bfd.mk@@ -70,10 +73,10 @@ import Data.Bits  ( (.&.), bit ) import Data.Word  ( Word ) -import Foreign.C        ( CString, CInt, CUInt, newCString, peekCString+import Foreign.C        ( CInt, CLong, CString, CUInt, newCString, peekCString                         , withCString ) import Foreign.Marshal  ( free, mallocArray, peekArray, toBool )-import Foreign.Ptr      ( Ptr, nullPtr, wordPtrToPtr )+import Foreign.Ptr      ( FunPtr, Ptr, nullPtr, wordPtrToPtr ) import Foreign.Storable ( Storable, alignment, peek, peekByteOff, poke, sizeOf )  import Prelude hiding ( catch )@@ -84,28 +87,31 @@                                                   , throwExceptionIfNull ) import Bindings.Bfd.Flags         as BfdFlags     ( Flags ( HasReloc ) ) import Bindings.Bfd.Format                        ( Format ( Object ) )-import Bindings.Bfd.Misc                          ( Vma, Vma' )+import Bindings.Bfd.Misc                          ( File, Vma, Vma' ) import Bindings.Bfd.Relocation                    ( Relocation ) import Bindings.Bfd.Section       as Section      ( Section, SectionName                                                   , getNext, getSize, getVma )+import Bindings.Bfd.Symbol                        ( Symbol ) import Bindings.Bfd.SymbolTable   as SymbolTable  ( SymbolTable, mk, tablePtr )-import Bindings.Bfd.Target        as Target       ( Target, TargetName-                                                  , canonicalizeDynamicReloc-                                                  , canonicalizeDynamicSymtab-                                                  , canonicalizeSymtab-                                                  , getDynamicRelocUpperBound-                                                  , getDynamicSymtabUpperBound-                                                  , getName, getSymtabUpperBound-                                                  , listSupported )+import Bindings.Bfd.Target        as Target       ( Target, TargetName, find+                                                  , getName, listSupported+                                                  , unTarget'CanonicalizeDynamicReloc+                                                  , unTarget'CanonicalizeDynamicSymtab+                                                  , unTarget'CanonicalizeSymtab+                                                  , unTarget'GetDynamicRelocUpperBound+                                                  , unTarget'GetDynamicSymtabUpperBound+                                                  , unTarget'GetSymtabUpperBound +                                                  , unTarget'PrintSymbol )  #include <bfd.h>  --- PUBLIC ######################################################################+-- ### PUBLIC ################################################################## --- Types =======================================================================+-- === Types =================================================================== --- | The opaque pointer to the Binary File Descriptor.+-- | The opaque handle to the Binary File Descriptor.  One 'Bfd' handle is+-- associated with exactly one binary file to be queried\/manipulated. data Bfd = Bfd {                        ptr       :: Ptr Bfd'                      , filePath  :: CString@@ -114,18 +120,21 @@            }      deriving (Show) --- Initialization ============================================================== +-- === Library Initialization ==================================================+ -- | Initialize the library.  You need to call 'initialize' once, before using  -- any of the functions in this library. initialize    :: IO () initialize = c_bfd_init --- File Operations ============================================================= +-- === File Operations =========================================================+ -- | Returns a list of tuples representing the possible combinations of --- 'TargetName' and 'Format' that are valid for this file on this platform.+-- 'TargetName' and 'Format' that are valid for the 'FilePath' on this platform+-- (see 'listSupported'). -- -- /Possible Exceptions:/  Same as 'open'. targetsAndFormats @@ -155,23 +164,17 @@                          else return xs                False -> return xs --- | Opens the file 'FilePath' with the given target 'TargetName' and open mode --- (as defined by the Unix fopen(3) function) and returns a 'Bfd' object on --- success. FIXME: and marks it cacheable. +-- | Opens the 'FilePath' with the given 'TargetName' and /open mode/ as defined +-- by the Unix fopen(3) function, and returns a 'Bfd' handle on success.+-- FIXME: and marks it cacheable. ----- If the target is 'Nothing' then the environment variable /GNUTARGET/ is--- checked for a target name; if this is NULL or not defined then it chooses the--- the default target if set (see 'setDefault') and sets an internal flag in--- the 'Bfd' object indicating that the target was defaulted (see --- 'isTargetDefaulted'), or if not set, the first entry in the target list for --- the platform.  Passing the string \"default\" as the 'TargetName' or setting --- the environment variable to \"default\" also causes the above behavior.+-- Calls 'find'.  Refer to 'find' for a description of how the 'Target' is+-- selected. ----- /Important:/ Before you use the returned 'Bfd' object from a file you have--- opened, you must call 'checkFormat' to 1) validate that the supplied --- 'TargetName' is appropriate for the opened file, and 2) set the 'Format' for--- the 'Bfd'.  So for most intents and purposes, opening a file is a two-step--- process.+-- /Important:/ Before using the returned 'Bfd' handle a call must be made to +-- 'checkFormat' to 1) validate that the associated 'TargetName' is appropriate+-- for the file; and, 2) set the 'Format'.  So for most intents and purposes, +-- opening a file is a two-step process:  'open' followed by 'checkFormat'. -- -- /Possible Exceptions:/  'NoMemory' (if any allocation fails), 'SystemCall'  -- (if open failed), and 'InvalidTarget' (if supplied target is unknown).@@ -193,10 +196,12 @@       bfd <- throwExceptionIfNull "open" fp (show targ) cmd       return $ Bfd bfd fp' targ' mode' --- | Close a 'Bfd' and if all went well, return 'True'.  If the 'Bfd' was open--- for writing, then pending operations are completed and the file written out--- and closed.  If the created file is executable, then chmod(3) is called to--- mark it as such.+-- | Close a 'Bfd' handle and if all went well return 'True'.  Otherwise +-- 'False'.+--+-- If the 'Bfd' was open for writing then pending operations are completed and+-- the file written out and closed.  If the created file is executable then +-- /chmod(3)/ is called to mark it as such. close    :: Bfd    -> IO Bool@@ -208,11 +213,13 @@       free $ mode bfd       return $ toBool r --- | Close a 'Bfd' and if all went well, return 'True'.  Differs from 'close'--- in that it does not complete any pending operations.  This function would be--- used if the application had just used a 'Bfd' for swapping and didn't want to--- use any of the writing code.  If the created file is executable, then --- chmod(3) is called to mark it as such.+-- | Close a 'Bfd' handle and if all went well, return 'True'.  Otherwise +-- 'False'.+--+-- Differs from 'close' in that it does not complete any pending operations.  +-- This function is used if the application had just used a 'Bfd' for swapping +-- and didn't want to use any of the written code.  If the created file is+-- executable, then /chmod(3)/ is called to mark it as such. closeAllDone    :: Bfd    -> IO Bool@@ -224,15 +231,18 @@       free $ mode bfd       return $ toBool r --- Setting the Format ========================================================== --- | The second part of opening a file (see 'open').  Validates that the --- 'TargetName' is appropriate for the opened file and if not, silently picks--- a more suitable 'TargetName', and also sets the 'Format' of the 'Bfd' object--- representing the opened file.+-- === Setting the Format ======================================================++-- | Before a 'Bfd' handle can be used, its 'Format' must be set exactly once. --+-- This function also validates that the 'TargetName' used in the 'open' call is+-- appropriate for the file and if not silently picks a more suitable +-- 'TargetName' from the available targets on the platform (see 'listSupported').+-- -- /Important:/ You must call this function before using the vast majority of--- these functions operating on the 'Bfd' as it updates critical data structures.+-- functions operating on the 'Bfd' handle as it updates critical data+-- structures. -- -- /Possible Exceptions:/ 'InvalidOperation' (if the file was opened write-only), checkFormat@@ -250,8 +260,9 @@    -> IO [TargetName] -} --- Attributes ================================================================== +-- === Attributes ==============================================================+ -- | Returns the disassembler associated with the 'Bfd'. getDisasm    :: Bfd@@ -267,7 +278,7 @@       fn <- peekByteOff (ptr bfd) (#offset struct bfd, filename)       return $ unBfd'Filename fn --- | Returns a 'List' of the 'Bfd's set 'Flags'.+-- | Returns a 'List' of the 'Flags' set for the 'Bfd'. getFlags    :: Bfd    -> IO [BfdFlags.Flags]@@ -459,12 +470,11 @@    -> IO SymbolTable getSymbolTable bfd =    do-      xvec  <- getTarget bfd-      bound <- getSymtabUpperBound xvec bfd+      bound <- getSymtabUpperBound bfd       let          ptrs = bound `quot` (#const sizeof(struct bfd_symbol *))       pps <- mallocArray ptrs-      count <- canonicalizeSymtab xvec bfd pps+      count <- canonicalizeSymtab bfd pps       return $ SymbolTable.mk pps count  getDynamicSymbolTable@@ -472,12 +482,11 @@    -> IO SymbolTable getDynamicSymbolTable bfd =    do-      xvec  <- getTarget bfd-      bound <- getDynamicSymtabUpperBound xvec bfd+      bound <- getDynamicSymtabUpperBound bfd       let          ptrs = fromIntegral bound `quot` (#const sizeof(struct bfd_symbol *))       pps <- mallocArray ptrs-      count <- canonicalizeDynamicSymtab xvec bfd pps+      count <- canonicalizeDynamicSymtab bfd pps       return $ SymbolTable.mk pps count  #if 0@@ -502,12 +511,11 @@    -> IO [Relocation] getDynamicRelocations bfd st =    do-      xvec  <- getTarget bfd-      bound <- getDynamicRelocUpperBound xvec bfd+      bound <- getDynamicRelocUpperBound bfd       let          ptrs = fromIntegral bound `quot` (#const sizeof(arelent *))       ppr <- mallocArray ptrs-      count <- canonicalizeDynamicReloc xvec bfd ppr $ tablePtr st+      count <- canonicalizeDynamicReloc bfd ppr $ tablePtr st       prs <- peekArray count ppr       mapM peek prs @@ -527,6 +535,19 @@                s' <- peekCString s                return s' +getPrintSymbol+   :: Bfd+   -> File+   -> Symbol+   -> IO (IO ())+getPrintSymbol bfd file sym =+   do +      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_print_symbol)+      let+         f = d_Bfd_File_Symbol_CUInt_Void (unTarget'PrintSymbol fn) (ptr bfd) file sym 2+      return f+ -- Internal ====================================================================  data Bfd' = Filename      String@@ -591,6 +612,91 @@  -- PRIVATE ##################################################################### +canonicalizeDynamicReloc+   :: Bfd+   -> Ptr (Ptr Relocation)+   -> Ptr Symbol+   -> IO Int+canonicalizeDynamicReloc bfd rels syms =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc)+      r <- d_Bfd_PtrPtrRelocation_PtrSymbol_CLong (unTarget'CanonicalizeDynamicReloc fn) (ptr bfd) rels syms+      return $ fromIntegral r++canonicalizeDynamicSymtab+   :: Bfd+   -> Ptr Symbol+   -> IO Int+canonicalizeDynamicSymtab bfd ps =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab)+      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeDynamicSymtab fn) (ptr bfd) ps+      return $ fromIntegral r++canonicalizeSymtab+   :: Bfd+   -> Ptr Symbol+   -> IO Int+canonicalizeSymtab bfd ps =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_symtab)+      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeSymtab fn) (ptr bfd) ps+      return $ fromIntegral r++getDynamicRelocUpperBound+   :: Bfd+   -> IO Int+getDynamicRelocUpperBound bfd =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound)+      r <- d_Bfd_CLong (unTarget'GetDynamicRelocUpperBound fn) (ptr bfd)+      return $ fromIntegral r++getDynamicSymtabUpperBound+   :: Bfd+   -> IO Int+getDynamicSymtabUpperBound bfd =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound)+      r <- d_Bfd_CLong (unTarget'GetDynamicSymtabUpperBound fn) (ptr bfd)+      return $ fromIntegral r++getSymtabUpperBound+   :: Bfd+   -> IO Int+getSymtabUpperBound bfd =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_symtab_upper_bound)+      r <- d_Bfd_CLong (unTarget'GetSymtabUpperBound fn) $ ptr bfd+      return $ fromIntegral r++#if 0+getSyntheticSymtab+   :: Bfd+   -> SymbolTable+   -> SymbolTable+   -> Ptr Symbol+   -> IO Int+getSyntheticSymtab bfd sst dst synth =+   do+      targ <- getTarget bfd+      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_synthetic_symtab)+      r <- d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong (fn' fn) (ptr bfd) sts stp dts dtp synth+      return $ fromIntegral r+   where+      fn' = unTarget'GetSyntheticSymtab+      sts = fromIntegral $ tableSize sst+      stp = tablePtr sst+      dts = fromIntegral $ tableSize dst+      dtp = tablePtr dst+#endif+ unBfd'Filename    :: Bfd'    -> String@@ -701,3 +807,26 @@ foreign import ccall unsafe "bfd.h _bfd_peek_is_thin_archive" c__bfd_peek_is_thin_archive    :: Ptr Bfd'    -> IO CInt++foreign import ccall unsafe "dynamic" d_Bfd_CLong+   :: FunPtr (Ptr Bfd' -> IO CLong)+   -> (Ptr Bfd' -> IO CLong)++#if 0+foreign import ccall unsafe "dynamic" d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong+   :: FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong) +   -> (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)+#endif++foreign import ccall unsafe "dynamic" d_Bfd_File_Symbol_CUInt_Void+   :: FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()) +   -> (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())++foreign import ccall unsafe "dynamic" d_Bfd_PtrPtrRelocation_PtrSymbol_CLong+   :: FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong) +   -> (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)++foreign import ccall unsafe "dynamic" d_Bfd_PtrSymbol_CLong+   :: FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)+   -> (Ptr Bfd' -> Ptr Symbol -> IO CLong)+
+ src/Bindings/Bfd/Disasm/I386/Cell.hs view
@@ -0,0 +1,30 @@+module Bindings.Bfd.Disasm.I386.Cell where++import Bindings.Bfd.Disasm.I386.Address+import Bindings.Bfd.Disasm.I386.EffectiveAddr+import Bindings.Bfd.Disasm.I386.Register+++data Cell   = Stk Int Int        -- width, offset from rsp+            | Reg Register+            | Flg Char+            | Ind Int (Maybe Register) EffectiveAddr (Maybe Int) (Maybe Address)+     deriving (Show)++{-+checkWidth+   :: Int+   -> [Cell]+   -> [Cell]+checkWidth w cs = map f cs+   where+      f c =+         case width c == w of+            True  -> c+            False -> error $ "Cell.checkWidth: " ++ show w ++ " " ++ show c++width+   :: Cell+   -> Int+width c = error $ "Cell.width: " ++ show c+-}
src/Bindings/Bfd/Disasm/I386/CondCode.hs view
@@ -13,14 +13,29 @@               | NotEqual               | NotSigned               | Parity+              | NotParity               | Signed-              | Zero      deriving (Show)   toCondCode    :: String    -> Maybe CondCode-toCondCode ""  = Nothing-toCondCode "z" = Just Zero-toCondCode s  = error $ "toCondCode: " ++ show s+toCondCode ""   = Nothing+toCondCode "a"  = Just Above+toCondCode "ae" = Just AboveOrEqual+toCondCode "b"  = Just Below+toCondCode "be" = Just BelowOrEqual+toCondCode "e"  = Just Equal+toCondCode "g"  = Just Greater+toCondCode "ge" = Just GreaterOrEqual+toCondCode "l"  = Just Less+toCondCode "le" = Just LessOrEqual+toCondCode "ne" = Just NotEqual+toCondCode "ns" = Just NotSigned+toCondCode "nz" = Just NotEqual+toCondCode "p"  = Just Parity+toCondCode "np" = Just NotParity+toCondCode "s"  = Just Signed+toCondCode "z"  = Just Equal+toCondCode s    = error $ "toCondCode: " ++ show s
src/Bindings/Bfd/Disasm/I386/EffectiveAddr.hs view
@@ -1,10 +1,21 @@ module Bindings.Bfd.Disasm.I386.EffectiveAddr where +import Bindings.Bfd.Disasm.I386.Register + data EffectiveAddr = EA {-                          base   :: String-                        , index  :: String+                          base   :: Maybe Register+                        , index  :: Maybe Register                         , scale  :: Int                      }                    | NoEA      deriving (Eq, Ord, Show)+++registers+   :: EffectiveAddr+   -> [Register]+registers (EA (Just r1)  Nothing  _) =      [r1]+registers (EA  Nothing  (Just r2) _) =      [r2]+registers (EA (Just r1) (Just r2) _) = r1 : [r2]+registers x                          = error $ "EffectiveAddr.registers: " ++ show x
src/Bindings/Bfd/Disasm/I386/Insn.hs view
@@ -6,7 +6,8 @@   data Insn = Insn {-                       prefix    :: Maybe Prefix+                       length    :: Int+                     , prefix    :: Maybe Prefix                      , mnemonic  :: Mnemonic                      , operands  :: [Operand]             }
src/Bindings/Bfd/Disasm/I386/Lex.x view
@@ -31,6 +31,8 @@    "%"$alphanum+"("$decdigit")"                             { register         }    "%"$alphanum+                                            { register         }    $alphanum+".s"{0,1}                                      { mnemonic         }+   $alphanum+",pt"{0,1}                                     { mnemonic         }+   $alphanum+",pn"{0,1}                                     { mnemonic         }    "(bad)"                                                  { mnemonic         }    "("                                                      { parensL          }    ")"                                                      { parensR          }
src/Bindings/Bfd/Disasm/I386/Mnemonic.hs view
@@ -7,47 +7,51 @@   data Mnemonic = Add {-                     width1   :: Int+                     bits1   :: Int                 }               | AddCarry {-                     width1   :: Int+                     bits1   :: Int                 }               | AddScalar {                      precision :: Precision                 }-              | BitwiseAnd {-                     width1   :: Int+              | BitAnd {+                     bits1   :: Int                 }-              | BitwiseExclOr  {+               | BitAndXmm                         -- FIXME+              | BitExclOr  {                      xmmType  :: XmmType                 }-              | BitwiseNot {-                     width1   :: Int+              | BitNot {+                     bits1   :: Int                 }-              | BitwiseOr {-                     width1   :: Int+              | BitOr {+                     bits1   :: Int                 }+               | BitOrXmm                          -- FIXME+               | BitScan                           -- FIXME               | Branch {                      condCode :: CondCode                 }               | Call {-                     width1   :: Int+                     bits1   :: Int                 }               | Compare {-                     width1   :: Int+                     bits1   :: Int                 }               | CompareExchange {-                     width1   :: Int+                     bits1   :: Int                 }               | CompareString {-                     width1   :: Int+                     bits1   :: Int                 }               | CompareUnordered {                      precision :: Precision                 }+               | CompareXmm                        -- FIXME               | Convert {-                     width1   :: Int-                   , width2   :: Int+                     bits1   :: Int+                   , bits2   :: Int                    , isSplit  :: Bool                 }               | ConvertXmm {@@ -58,48 +62,59 @@                 }               | Cpuid               | Decrement {-                     width1   :: Int+                     bits1   :: Int                 }               | Direction {                      isSet :: Bool                 }               | Divide {-                     width1   :: Int+                     bits1   :: Int                 }               | DivideInt {-                     width1   :: Int+                     bits1   :: Int                 }               | DivideScalar {                      precision   :: Precision                 }               | Exchange {-                     width1   :: Int+                     bits1   :: Int                 }               | ExchangeAdd {-                     width1   :: Int+                     bits1   :: Int                 }+               | Fpu                                     -- FIXME+               | FpuCopyPop {+                     bits1    :: Int+                 }+               | FpuLoadValue {+                     bits1    :: Int+                 }+              | Halt               | Increment {-                     width1   :: Int+                     bits1   :: Int                 }               | Jump {                      mbWidth :: Maybe Int                 }               | Leave {-                     width1   :: Int+                     bits1   :: Int                 }               | LoadEffAddr {-                     width1   :: Int+                     bits1   :: Int                 }+              | LogicalExclOr               | Loop+               | Maximum                                 -- FIXME+               | Minimum                                 -- FIXME               | Move {-                     width1            :: Int-                   , mbWidthSignExtend :: Maybe (Int, Bool)+                     bits1            :: Int+                   , mbWidthSignExtend :: Maybe (Int, Bool) -- (bits, T=se,F=ze)                 }               | MoveAligned {-                     precision   :: Precision+                     xmmType     :: XmmType                 }               | MoveCond {-                     width1   :: Int+                     bits1   :: Int                    , condCode :: CondCode                 }               | MoveNonTemp {@@ -110,68 +125,75 @@                    , isHigh1     :: Bool                    , isHigh2     :: Bool                 }-              | MoveScalar {-                     precision   :: Precision+               | MoveScalar {+                     bits1       :: Int                 }               | MoveString {-                     width1   :: Int+                     bits1   :: Int                 }               | MoveUnaligned {                      precision   :: Precision                 }               | Multiply {-                     width1   :: Int+                     bits1   :: Int                 }               | MultiplyInt {-                     width1   :: Int+                     bits1   :: Int                 }               | MultiplyScalar {                      xmmType  :: XmmType                 }               | Negate {-                     width1   :: Int+                     bits1   :: Int                 }               | NoOp+              | Pause               | Pop {-                     width1   :: Int+                     bits1   :: Int                 }               | Push {-                     width1   :: Int+                     bits1   :: Int                 }               | Return {-                     width1   :: Int+                     bits1   :: Int                 }               | Rotate {-                     width1   :: Int+                     bits1   :: Int                    , isRight  :: Bool                 }+              | ScanString {+                     bits1   :: Int+                }               | Set {                      condCode :: CondCode                 }               | Shift {-                     width1   :: Int+                     bits1   :: Int                    , isRight  :: Bool                    , isArith  :: Bool                 }+               | SquareRoot                        -- FIXME               | StoreString {-                     width1   :: Int+                     bits1   :: Int                 }               | Subtract {-                     width1   :: Int+                     bits1   :: Int                 }               | SubtractBorrow {-                     width1   :: Int+                     bits1   :: Int                 }               | SubtractScalar {                      precision   :: Precision                 }               | Test {-                     width1   :: Int+                     bits1   :: Int                 }               | Unpack {                      order       :: Order-                   , precision   :: Precision+                   , xmmType     :: XmmType+                   , mbWidth     :: Maybe Int                 }+              | FIXME      deriving (Show)  @@ -179,163 +201,235 @@    :: String    -> Mnemonic toMnemonic s-   | s == "adcl" = AddCarry 4-   | s == "addb" = Add 1-   | s == "addl" = Add 4-   | s == "addq" = Add 8-   | s == "addsd" = AddScalar Double-   | s == "addss" = AddScalar Single-   | s == "addw" = Add 2-   | s == "andb" = BitwiseAnd 1-   | s == "andl" = BitwiseAnd 4-   | s == "andq" = BitwiseAnd 8-   | s == "andw" = BitwiseAnd 2-   | s == "callq" = Call 8-   | s == "cld" = Direction False-   | s == "cltd" = Convert 4 8 True-   | s == "cltq" = Convert 4 8 False-   | s == "cmovael" = MoveCond 4 AboveOrEqual-   | s == "cmovaeq" = MoveCond 8 AboveOrEqual-   | s == "cmoval" = MoveCond 4 Above-   | s == "cmovaq" = MoveCond 8 Above-   | s == "cmovbel" = MoveCond 4 BelowOrEqual-   | s == "cmovbeq" = MoveCond 8 BelowOrEqual-   | s == "cmovbl" = MoveCond 4 Below-   | s == "cmovbq" = MoveCond 8 Below-   | s == "cmovel" = MoveCond 4 Equal-   | s == "cmoveq" = MoveCond 8 Equal-   | s == "cmovgel" = MoveCond 4 GreaterOrEqual-   | s == "cmovgl" = MoveCond 4 Greater-   | s == "cmovlel" = MoveCond 4 LessOrEqual-   | s == "cmovll" = MoveCond 4 Less-   | s == "cmovnel" = MoveCond 4 NotEqual-   | s == "cmovneq" = MoveCond 8 NotEqual-   | s == "cmpb" = Compare 1-   | s == "cmpl" = Compare 4-   | s == "cmpsb" = CompareString 1-   | s == "cmpq" = Compare 8-   | s == "cmpw" = Compare 2-   | s == "cmpxchgl" = CompareExchange 4-   | s == "cmpxchgq" = CompareExchange 8-   | s == "cpuid" = Cpuid-   | s == "cvtpd2ps" = ConvertXmm 2 (FloatingPt Double) (FloatingPt Single) False-   | s == "cvtps2pd" = ConvertXmm 2 (FloatingPt Single) (FloatingPt Double) False-   | s == "cvtsd2ss" = ConvertXmm 1 (FloatingPt Double) (Int 0) False -- shouldn't this have a size postfix?  it doesn't...-   | s == "cvtsi2sdl" = ConvertXmm 1 (Int 4) (FloatingPt Double) False-   | s == "cvtsi2sdq" = ConvertXmm 1 (Int 8) (FloatingPt Double) False-   | s == "cvtsi2ssl" = ConvertXmm 1 (Int 4) (FloatingPt Single) False-   | s == "cvtsi2ssq" = ConvertXmm 1 (Int 8) (FloatingPt Single) False-   | s == "cvtss2sd" = ConvertXmm 1 (FloatingPt Single) (FloatingPt Double) False-   | s == "cvttsd2si" = ConvertXmm 1 (FloatingPt Double) (Int 0) True -- shouldn't this have a size postfix?  it doesn't...-   | s == "cvttss2siq" = ConvertXmm 1 (FloatingPt Single) (Int 8) True-   | s == "cwtl" = Convert 2 4 False-   | s == "decb" = Decrement 1-   | s == "decl" = Decrement 4-   | s == "decq" = Decrement 8-   | s == "divl" = Divide 4-   | s == "divq" = Divide 8-   | s == "divsd" = DivideScalar Double-   | s == "divss" = DivideScalar Single-   | s == "idivl" = DivideInt 4-   | s == "imull" = MultiplyInt 4-   | s == "imulq" = MultiplyInt 8-   | s == "incl" = Increment 4-   | s == "incq" = Increment 8-   | s == "ja" = Branch Above-   | s == "jae" = Branch AboveOrEqual-   | s == "jb" = Branch Below-   | s == "jbe" = Branch BelowOrEqual-   | s == "je" = Branch Equal-   | s == "jg" = Branch Greater-   | s == "jge" = Branch GreaterOrEqual-   | s == "jl" = Branch Less-   | s == "jle" = Branch LessOrEqual-   | s == "jne" = Branch NotEqual-   | s == "jns" = Branch NotSigned-   | s == "jmp" = Jump Nothing-   | s == "jmpq" = Jump $ Just 8-   | s == "jp" = Branch Parity-   | s == "js" = Branch Signed-   | s == "leal" = LoadEffAddr 4-   | s == "leaq" = LoadEffAddr 8-   | s == "leaveq" = Leave 8-   | s == "movabsq" = Move 8 Nothing-   | s == "movaps" = MoveAligned Single-   | s == "movb" = Move 1 Nothing-   | s == "movl" = Move 4 Nothing-   | s == "movlpd" = MovePacked Double False False-   | s == "movntps" = MoveNonTemp $ Right $ FloatingPt Single-   | s == "movq" = Move 8 Nothing-   | s == "movsbl" = Move 1 $ Just (4, True)-   | s == "movsbq" = Move 1 $ Just (8, True)-   | s == "movsd" = MoveString 4-   | s == "movslq" = Move 4 $ Just (8, True)-   | s == "movsq" = MoveString 8-   | s == "movss" = MoveScalar Single-   | s == "movswl" = Move 2 $ Just (4, True)-   | s == "movswq" = Move 2 $ Just (8, True)-   | s == "movups" = MoveUnaligned Single-   | s == "movw" = Move 2 Nothing-   | s == "movzbl" = Move 1 $ Just (4, False)-   | s == "movzwl" = Move 2 $ Just (4, False)-   | s == "mull" = Multiply 4-   | s == "mulq" = Multiply 8-   | s == "mulss" = MultiplyScalar $ FloatingPt Single-   | s == "negl" = Negate 4-   | s == "negq" = Negate 8-   | s == "nop" = NoOp-   | s == "nopl" = NoOp-   | s == "nopw" = NoOp-   | s == "notl" = BitwiseNot 4-   | s == "notq" = BitwiseNot 8-   | s == "orb" = BitwiseOr 1-   | s == "orl" = BitwiseOr 4-   | s == "orq" = BitwiseOr 8-   | s == "orw" = BitwiseOr 2-   | s == "popq" = Pop 8-   | s == "pushq" = Push 8-   | s == "roll" = Rotate 4 False-   | s == "retq" = Return 8-   | s == "sarl" = Shift 4 True True-   | s == "sarq" = Shift 8 True True-   | s == "sbbl" = SubtractBorrow 4-   | s == "sbbq" = SubtractBorrow 8-   | s == "seta" = Set Above-   | s == "setb" = Set Below-   | s == "setbe" = Set BelowOrEqual-   | s == "sete" = Set Equal-   | s == "setg" = Set Greater-   | s == "setl" = Set Less-   | s == "setle" = Set LessOrEqual-   | s == "setne" = Set NotEqual-   | s == "shll" = Shift 4 False False-   | s == "shlq" = Shift 8 False False-   | s == "shrb" = Shift 1 True False-   | s == "shrl" = Shift 4 True False-   | s == "shrq" = Shift 8 True False-   | s == "shrw" = Shift 2 True False-   | s == "stosq" = StoreString 8-   | s == "subb" = Subtract 1-   | s == "subl" = Subtract 4-   | s == "subq" = Subtract 8-   | s == "subss" = SubtractScalar Single-   | s == "testb" = Test 1-   | s == "testl" = Test 4-   | s == "testq" = Test 8-   | s == "testw" = Test 2-   | s == "ucomiss" = CompareUnordered Single-   | s == "unpcklpd" = Unpack Low Double-   | s == "unpcklps" = Unpack Low Single-   | s == "xaddl" = ExchangeAdd 4-   | s == "xchgl" = Exchange 4-   | s == "xchgq" = Exchange 8-   | s == "xchgw" = Exchange 2-   | s == "xorb" = BitwiseExclOr $ Int 1-   | s == "xorl" = BitwiseExclOr $ Int 4-   | s == "xorpd" = BitwiseExclOr $ FloatingPt Double-   | s == "xorps" = BitwiseExclOr $ FloatingPt Single-   | s == "xorq" = BitwiseExclOr $ Int 8-   | s == "xorw" = BitwiseExclOr $ Int 2+   | s == "adcl"       = AddCarry 32+   | s == "addb"       = Add 8+   | s == "addl"       = Add 32+   | s == "addq"       = Add 64+   | s == "addsd"      = AddScalar Double+   | s == "addss"      = AddScalar Single+   | s == "addw"       = Add 16+   | s == "andb"       = BitAnd 8+   | s == "andl"       = BitAnd 32+   | s == "andnpd"     = BitAndXmm+   | s == "andpd"      = BitAndXmm+   | s == "andq"       = BitAnd 64+   | s == "andw"       = BitAnd 16+   | s == "bsfq"       = BitScan+   | s == "callq"      = Call 64+   | s == "cbtw"       = Convert 8 16 False+   | s == "cld"        = Direction False+   | s == "cltd"       = Convert 32 64 True+   | s == "cltq"       = Convert 32 64 False+   | s == "cmovael"    = MoveCond 32 AboveOrEqual+   | s == "cmovaeq"    = MoveCond 64 AboveOrEqual+   | s == "cmoval"     = MoveCond 32 Above+   | s == "cmovaq"     = MoveCond 64 Above+   | s == "cmovbel"    = MoveCond 32 BelowOrEqual+   | s == "cmovbeq"    = MoveCond 64 BelowOrEqual+   | s == "cmovbl"     = MoveCond 32 Below+   | s == "cmovbq"     = MoveCond 64 Below+   | s == "cmovel"     = MoveCond 32 Equal+   | s == "cmoveq"     = MoveCond 64 Equal+   | s == "cmovgel"    = MoveCond 32 GreaterOrEqual+   | s == "cmovgeq"    = MoveCond 64 GreaterOrEqual+   | s == "cmovgl"     = MoveCond 32 Greater+   | s == "cmovgq"     = MoveCond 64 Greater+   | s == "cmovlel"    = MoveCond 32 LessOrEqual+   | s == "cmovleq"    = MoveCond 64 LessOrEqual+   | s == "cmovlew"    = MoveCond 16 LessOrEqual+   | s == "cmovll"     = MoveCond 32 Less+   | s == "cmovlq"     = MoveCond 64 Less+   | s == "cmovnel"    = MoveCond 32 NotEqual+   | s == "cmovneq"    = MoveCond 64 NotEqual+   | s == "cmovnpl"    = MoveCond 32 NotParity+   | s == "cmovnsl"    = MoveCond 32 NotSigned+   | s == "cmovnsq"    = MoveCond 64 NotSigned+   | s == "cmovpl"     = MoveCond 32 Parity+   | s == "cmovpq"     = MoveCond 64 Parity+   | s == "cmovsl"     = MoveCond 32 Signed+   | s == "cmpb"       = Compare 8+   | s == "cmpeqsd"    = CompareXmm+   | s == "cmpl"       = Compare 32+   | s == "cmpneqsd"   = CompareXmm+   | s == "cmpnlesd"   = CompareXmm+   | s == "cmpnltsd"   = CompareXmm+   | s == "cmpsb"      = CompareString 8+   | s == "cmpq"       = Compare 64+   | s == "cmpw"       = Compare 16+   | s == "cmpxchgl"   = CompareExchange 32+   | s == "cmpxchgq"   = CompareExchange 64+   | s == "cpuid"      = Cpuid+   | s == "cqto"       = Convert 64 128 False                              -- FIXME+   | s == "cvtpd2ps"   = ConvertXmm 16 (FloatingPt Double) (FloatingPt Single) False+   | s == "cvtps2pd"   = ConvertXmm 16 (FloatingPt Single) (FloatingPt Double) False+   | s == "cvtsd2ss"   = ConvertXmm 8 (FloatingPt Double) (Int 0) False -- shouldn't this have a size postfix?  it doesn't...+   | s == "cvtsi2sdl"  = ConvertXmm 8 (Int 32) (FloatingPt Double) False+   | s == "cvtsi2sdq"  = ConvertXmm 8 (Int 64) (FloatingPt Double) False+   | s == "cvtsi2ssl"  = ConvertXmm 8 (Int 32) (FloatingPt Single) False+   | s == "cvtsi2ssq"  = ConvertXmm 8 (Int 64) (FloatingPt Single) False+   | s == "cvtss2sd"   = ConvertXmm 8 (FloatingPt Single) (FloatingPt Double) False+   | s == "cvttsd2si"  = ConvertXmm 8 (FloatingPt Double) (Int 0) True -- shouldn't this have a size postfix?  it doesn't...+   | s == "cvttsd2siq" = ConvertXmm 8 (FloatingPt Double) (Int 8) True+   | s == "cvttss2siq" = ConvertXmm 8 (FloatingPt Single) (Int 8) True+   | s == "cwtl"       = Convert 16 32 False+   | s == "decb"       = Decrement 8+   | s == "decl"       = Decrement 32+   | s == "decq"       = Decrement 64+   | s == "decw"       = Decrement 16+   | s == "divl"       = Divide 32+   | s == "divq"       = Divide 64+   | s == "divsd"      = DivideScalar Double+   | s == "divss"      = DivideScalar Single+   | s == "fchs"       = Fpu+   | s == "fcmove"     = Fpu+   | s == "fcmovne"    = Fpu+   | s == "fld"        = Fpu+   | s == "fldcw"      = Fpu+   | s == "fldl"       = FpuLoadValue 64+   | s == "fnstcw"     = Fpu+   | s == "fstp"       = Fpu+   | s == "fstpl"      = FpuCopyPop 64+   | s == "fxch"       = Fpu+   | s == "hlt"        = Halt+   | s == "idivl"      = DivideInt 32+   | s == "idivq"      = DivideInt 64+   | s == "imull"      = MultiplyInt 32+   | s == "imulq"      = MultiplyInt 64+   | s == "incl"       = Increment 32+   | s == "incq"       = Increment 64+   | s == "incw"       = Increment 16+   | s == "ja"         = Branch Above+   | s == "ja,pn"      = Branch Above                   -- FIXME+   | s == "jae"        = Branch AboveOrEqual+   | s == "jae,pn"     = Branch AboveOrEqual            -- FIXME+   | s == "jb"         = Branch Below+   | s == "jbe"        = Branch BelowOrEqual+   | s == "jbe,pn"     = Branch BelowOrEqual            -- FIXME+   | s == "jbe,pt"     = Branch BelowOrEqual            -- FIXME+   | s == "je"         = Branch Equal+   | s == "je,pn"      = Branch Equal                   -- FIXME+   | s == "jg"         = Branch Greater+   | s == "jge"        = Branch GreaterOrEqual+   | s == "jl"         = Branch Less+   | s == "jl,pt"      = Branch Less                    -- FIXME+   | s == "jle"        = Branch LessOrEqual+   | s == "jle,pn"     = Branch LessOrEqual             -- FIXME+   | s == "jne"        = Branch NotEqual+   | s == "jne,pn"     = Branch NotEqual                -- FIXME+   | s == "jne,pt"     = Branch NotEqual		-- FIXME+   | s == "jnp"        = Branch NotParity+   | s == "jns"        = Branch NotSigned+   | s == "jmp"        = Jump Nothing+   | s == "jmpq"       = Jump $ Just 64+   | s == "jp"         = Branch Parity+   | s == "jp,pn"      = Branch Parity                  -- FIXME+   | s == "js"         = Branch Signed+   | s == "js,pn"      = Branch Signed                  -- FIXME+   | s == "leal"       = LoadEffAddr 32+   | s == "leaq"       = LoadEffAddr 64+   | s == "leaveq"     = Leave 64+   | s == "maxsd"      = Maximum                         -- FIXME+   | s == "minsd"      = Minimum                         -- FIXME+   | s == "movabsq"    = Move 64 Nothing+   | s == "movapd"     = MoveAligned $ FloatingPt Double+   | s == "movaps"     = MoveAligned $ FloatingPt Single+   | s == "movb"       = Move 8 Nothing+   | s == "movdqa"     = MoveAligned $ Int 128+   | s == "movl"       = Move 32 Nothing+   | s == "movlpd"     = MovePacked Double False False+   | s == "movntps"    = MoveNonTemp $ Right $ FloatingPt Single+   | s == "movq"       = Move 64 Nothing+   | s == "movsb"      = MoveString 8+   | s == "movsbl"     = Move 8 $ Just (32, True)+   | s == "movsbq"     = Move 8 $ Just (64, True)+   | s == "movsbw"     = Move 8 $ Just (16, True)+   | s == "movsd"      = MoveScalar 64+   | s == "movslq"     = Move 32 $ Just (64, True)+   | s == "movsq"      = MoveString 64+   | s == "movss"      = MoveScalar 32+   | s == "movswl"     = Move 16 $ Just (32, True)+   | s == "movswq"     = Move 16 $ Just (64, True)+   | s == "movups"     = MoveUnaligned Single+   | s == "movw"       = Move 16 Nothing+   | s == "movzbl"     = Move 8 $ Just (32, False)+   | s == "movzbq"     = Move 8 $ Just (64, False)+   | s == "movzbw"     = Move 8 $ Just (16, False)+   | s == "movzwl"     = Move 16 $ Just (32, False)+   | s == "movzwq"     = Move 16 $ Just (64, False)+   | s == "mull"       = Multiply 32+   | s == "mulq"       = Multiply 64+   | s == "mulsd"      = MultiplyScalar $ FloatingPt Double+   | s == "mulss"      = MultiplyScalar $ FloatingPt Single+   | s == "negl"       = Negate 32+   | s == "negq"       = Negate 64+   | s == "nop"        = NoOp+   | s == "nopl"       = NoOp+   | s == "nopw"       = NoOp+   | s == "notl"       = BitNot 32+   | s == "notq"       = BitNot 64+   | s == "orb"        = BitOr 8+   | s == "orl"        = BitOr 32+   | s == "orpd"       = BitOrXmm+   | s == "orq"        = BitOr 64+   | s == "orw"        = BitOr 16+   | s == "pause"      = Pause+   | s == "popq"       = Pop 64+   | s == "punpcklqdq" = Unpack Low (Int 64) (Just 128)+   | s == "pushq"      = Push 64+   | s == "pxor"       = LogicalExclOr+   | s == "roll"       = Rotate 32 False+   | s == "retq"       = Return 64+   | s == "sarl"       = Shift 32 True True+   | s == "sarq"       = Shift 64 True True+   | s == "sbbl"       = SubtractBorrow 32+   | s == "sbbq"       = SubtractBorrow 64+   | s == "scasb"      = ScanString 8+   | s == "seta"       = Set Above+   | s == "setae"      = Set AboveOrEqual+   | s == "setb"       = Set Below+   | s == "setbe"      = Set BelowOrEqual+   | s == "sete"       = Set Equal+   | s == "setg"       = Set Greater+   | s == "setge"      = Set GreaterOrEqual+   | s == "setl"       = Set Less+   | s == "setle"      = Set LessOrEqual+   | s == "setne"      = Set NotEqual+   | s == "setnp"      = Set NotParity+   | s == "setp"       = Set Parity+   | s == "shlb"       = Shift 8 False False+   | s == "shll"       = Shift 32 False False+   | s == "shlq"       = Shift 64 False False+   | s == "shrb"       = Shift 8 True False+   | s == "shrl"       = Shift 32 True False+   | s == "shrq"       = Shift 64 True False+   | s == "shrw"       = Shift 16 True False+   | s == "sqrtsd"     = SquareRoot+   | s == "stosq"      = StoreString 64+   | s == "subb"       = Subtract 8+   | s == "subl"       = Subtract 32+   | s == "subq"       = Subtract 64+   | s == "subw"       = Subtract 16+   | s == "subsd"      = SubtractScalar Double+   | s == "subss"      = SubtractScalar Single+   | s == "testb"      = Test 8+   | s == "testl"      = Test 32+   | s == "testq"      = Test 64+   | s == "testw"      = Test 16+   | s == "ucomisd"    = CompareUnordered Double+   | s == "ucomiss"    = CompareUnordered Single+   | s == "unpcklpd"   = Unpack Low (FloatingPt Double) Nothing+   | s == "unpcklps"   = Unpack Low (FloatingPt Single) Nothing+   | s == "xaddl"      = ExchangeAdd 32+   | s == "xaddq"      = ExchangeAdd 64+   | s == "xchgl"      = Exchange 32+   | s == "xchgq"      = Exchange 64+   | s == "xchgw"      = Exchange 16+   | s == "xorb"       = BitExclOr $ Int 8+   | s == "xorl"       = BitExclOr $ Int 32+   | s == "xorpd"      = BitExclOr $ FloatingPt Double+   | s == "xorps"      = BitExclOr $ FloatingPt Single+   | s == "xorq"       = BitExclOr $ Int 64+   | s == "xorw"       = BitExclOr $ Int 16    | otherwise = error $ "toMnemonic: " ++ show s  @@ -358,9 +452,28 @@ isBranch (Loop    ) = True isBranch _          = False +isHalt+   :: Mnemonic+   -> Bool+isHalt Halt = True+isHalt _    = False+ isReturn    :: Mnemonic    -> Bool isReturn (Return _) = True isReturn _          = False+{-+unpcklps unpack and interleave low packed single precision floating point+unpcklpd unpack and interleave low packed double precision floating point+unpckhps unpack and interleave high packed single precision floating point+unpckhpd unpack and interleave high packed double precision floating point+punpckl unpack and interleave low 1 8+                                  1 16+                                  2 8+                                  2 16+                                  4 8+                                  4 16+                                  8 16+-} 
src/Bindings/Bfd/Disasm/I386/Operand.hs view
@@ -1,23 +1,25 @@ module Bindings.Bfd.Disasm.I386.Operand where  import Bindings.Bfd.Disasm.I386.Address+import Bindings.Bfd.Disasm.I386.Cell import Bindings.Bfd.Disasm.I386.EffectiveAddr+import Bindings.Bfd.Disasm.I386.Register      as R   data Operand = Abs  {                        address      :: Address                }              | DirD {-                       direct       :: String+                       direct       :: Register                }              | DirJ {-                       direct       :: String+                       direct       :: Register                }              | Imm  {                        immed        :: Int                }              | IndD {-                       section      :: String+                       section      :: Maybe Register                      , effAddr      :: EffectiveAddr                      , displacement :: Maybe Int                      , mbAddress    :: Maybe Address@@ -51,3 +53,12 @@    -> Bool isDirJ (DirJ _) = True isDirJ _        = False++defines+   :: Int+   -> Operand+   -> [Cell]+defines _ (DirD r       ) = [Reg r]+defines w (IndD s ea d a) = [Ind w s ea d a]+defines _ o        = error $ "Operand.defines: " ++ show o+
src/Bindings/Bfd/Disasm/I386/Parse.y view
@@ -14,6 +14,7 @@ import Bindings.Bfd.Disasm.I386.Mnemonic       as R import Bindings.Bfd.Disasm.I386.Operand        as O import Bindings.Bfd.Disasm.I386.Prefix+import Bindings.Bfd.Disasm.I386.Register }  %name parse@@ -34,8 +35,8 @@  %% insn     :: { Insn }-         :  PREFIXEDMNEMONIC operands                 { Insn (toPrefix $ head $1) (toMnemonic $ head $ tail $1) $2 }-         |  MNEMONIC         operands                 { Insn (Nothing           ) (toMnemonic               $1) $2 }+         :  PREFIXEDMNEMONIC operands                 { Insn 0 (toPrefix $ head $1) (toMnemonic $ head $ tail $1) $2 }+         |  MNEMONIC         operands                 { Insn 0 (Nothing           ) (toMnemonic               $1) $2 }  operands :: { [Operand] }          :  {- empty -}                               { [                                                    ]} -- nop@@ -66,14 +67,14 @@          :  CONSTANT                                  { Imm $1 }  directD  :: { Operand }-         :  REGISTER                                  { DirD $1 }+         :  register                                  { DirD $1 }  directJ  :: { Operand }-         :  '*' REGISTER                              { DirJ $2 }+         :  '*' register                              { DirJ $2 }  indirD   :: { Operand }-         :  indir1                                    { IndD "" (fst $1) (snd $1) Nothing }-         |  REGISTER ':' indir1                       { IndD $1 (fst $3) (snd $3) Nothing }+         :  indir1                                    { IndD Nothing   (fst $1) (snd $1) Nothing }+         |  register ':' indir1                       { IndD (Just $1) (fst $3) (snd $3) Nothing }   indirJ   :: { Operand }@@ -85,9 +86,12 @@          |  OFFSET                                    { (NoEA, Just $1) }  effAddr  :: { EffectiveAddr }-         :  '(' REGISTER ')'                          { EA $2 ""  1 }-         |  '(' ',' REGISTER ',' OFFSET ')'           { EA "" $3 $5 }-         |  '(' REGISTER ',' REGISTER ',' OFFSET ')'  { EA $2 $4 $6 }+         :  '(' register ')'                          { EA (Just $2) Nothing    1 }+         |  '(' ',' register ',' OFFSET ')'           { EA Nothing   (Just $3) $5 }+         |  '(' register ',' register ',' OFFSET ')'  { EA (Just $2) (Just $4) $6 }++register :: { Register }+         :  REGISTER                                  { toRegister $1 }  { happyError :: [Token] -> a
+ src/Bindings/Bfd/Disasm/I386/Register.hs view
@@ -0,0 +1,131 @@+module Bindings.Bfd.Disasm.I386.Register where+++data Register  = X Char Int Int+               | I Char Int Int+               | N Int  Int Int+               | P Char Int Int+               | Q      Int Int+               | F Int+               | Z Int  Int Int+               | S Char+               | C [Register]+     deriving (Eq, Ord, Show)+++toRegister+   :: String+   -> Register+toRegister "ah"     = X 'a' 8  15+toRegister "al"     = X 'a' 0   7+toRegister "ax"     = X 'a' 0  15+toRegister "bh"     = X 'b' 8  15+toRegister "bl"     = X 'b' 0   7+toRegister "bp"     = P 'b' 0  15+toRegister "bpl"    = P 'b' 0   7+toRegister "bx"     = X 'b' 0  15+toRegister "ch"     = X 'c' 8  15+toRegister "cl"     = X 'c' 0   7+toRegister "cx"     = X 'c' 0  15+toRegister "dh"     = X 'd' 8  15+toRegister "di"     = I 'd' 0  15+toRegister "dil"    = I 'd' 0   7+toRegister "dl"     = X 'd' 0   7+toRegister "ds"     = S 'd'+toRegister "dx"     = X 'd' 0  15+toRegister "dxax"   = C [(X 'd' 0 15), (X 'a' 0 15)]+toRegister "eax"    = X 'a' 0  31+toRegister "ebp"    = P 'b' 0  31+toRegister "ebx"    = X 'b' 0  31+toRegister "ecx"    = X 'c' 0  31+toRegister "edi"    = I 'd' 0  31+toRegister "edx"    = X 'd' 0  31+toRegister "edxeax" = C [(X 'd' 0 31), (X 'a' 0 31)]+toRegister "es"     = S 'e'+toRegister "esi"    = I 's' 0  31+toRegister "fs"     = S 'f'+toRegister "r8"     = N  8  0  63+toRegister "r8b"    = N  8  0   7+toRegister "r8d"    = N  8  0  31+toRegister "r8w"    = N  8  0  15+toRegister "r9"     = N  9  0  63+toRegister "r9b"    = N  9  0   7+toRegister "r9d"    = N  9  0  31+toRegister "r9w"    = N  9  0  15+toRegister "r10"    = N 10  0  63+toRegister "r10b"   = N 10  0   7+toRegister "r10d"   = N 10  0  31+toRegister "r10w"   = N 10  0  15+toRegister "r11"    = N 11  0  63+toRegister "r11b"   = N 11  0   7+toRegister "r11d"   = N 11  0  31+toRegister "r11w"   = N 11  0  15+toRegister "r12"    = N 12  0  63+toRegister "r12b"   = N 12  0   7+toRegister "r12d"   = N 12  0  31+toRegister "r12w"   = N 12  0  15+toRegister "r13"    = N 13  0  63+toRegister "r13b"   = N 13  0   7+toRegister "r13d"   = N 13  0  31+toRegister "r13w"   = N 13  0  15+toRegister "r14"    = N 14  0  63+toRegister "r14b"   = N 14  0   7+toRegister "r14d"   = N 14  0  31+toRegister "r14w"   = N 14  0  15+toRegister "r15"    = N 15  0  63+toRegister "r15b"   = N 15  0   7+toRegister "r15d"   = N 15  0  31+toRegister "r15w"   = N 15  0  15+toRegister "rax"    = X 'a' 0  63+toRegister "rbp"    = P 'b' 0  63+toRegister "rbx"    = X 'b' 0  63+toRegister "rcx"    = X 'c' 0  63+toRegister "rdi"    = I 'd' 0  63+toRegister "rdx"    = X 'd' 0  63+toRegister "rdxrax" = C [X 'd' 0 63, X 'a' 0 63]+toRegister "rip"    = Q     0  63+toRegister "rsi"    = I 's' 0  63+toRegister "rsp"    = P 's' 0  63+toRegister "si"     = I 's' 0  15+toRegister "sil"    = I 's' 0   7+toRegister "st"     = F (-1)+toRegister "st(0)"  = F  0+toRegister "st(1)"  = F  1+toRegister "xmm0"   = Z  0  0 127+toRegister "xmm1"   = Z  1  0 127+toRegister "xmm2"   = Z  2  0 127+toRegister "xmm3"   = Z  3  0 127+toRegister "xmm4"   = Z  4  0 127+toRegister "xmm5"   = Z  5  0 127+toRegister "xmm6"   = Z  6  0 127+toRegister "xmm7"   = Z  7  0 127+toRegister "xmm8"   = Z  8  0 127+toRegister "xmm9"   = Z  9  0 127+toRegister "xmm10"  = Z 10  0 127+toRegister "xmm11"  = Z 11  0 127+toRegister "xmm12"  = Z 12  0 127+toRegister "xmm13"  = Z 13  0 127+toRegister "xmm14"  = Z 14  0 127+toRegister "xmm15"  = Z 15  0 127+toRegister r        = error $ "Register.toRegister: " ++ r++size+   :: Register+   -> Int+size (X _ a b) = b - a + 1+size (I _ a b) = b - a + 1+size (N _ a b) = b - a + 1+size (P _ a b) = b - a + 1+size (F _) = 80+size (Z _ a b) = b - a + 1 +size (S _) = 16+size x = error $ "Register.size: " ++ show x++restrictBits+   :: Int+   -> Int+   -> Register+   -> Register+restrictBits a b (X r _ _) = X r a b+restrictBits a b (Z r _ _) = Z r a b+restrictBits _ _ r         = error $ "Register.restrictBits: " ++ show r
src/Bindings/Bfd/Disasm/I386/Term.hs view
@@ -1,29 +1,49 @@ module Bindings.Bfd.Disasm.I386.Term where -import Bindings.Bfd.Disasm.I386.Operand+import qualified Bindings.Bfd.Disasm.I386.Cell as C+import Bindings.Bfd.Disasm.I386.Operand  as O+import Bindings.Bfd.Disasm.I386.Register as R  -data Term = Term `Add` Term-          | Term `BitAnd` Term-          | Term `BitExclOr` Term-          | Term `BitOr` Term-          | Term `BitTest` Term-          | Term `GreaterOrEqual` Term-          | Term `Subtract` Term-          | If Term Term Term-          | Flag Char Term             -- right hand side-          -- terminals-          | Opr Int Operand            -- Int is width-          | Stk Int Int-          | Reg String-          | Flg Char-          | Con Int                    -- assumed to be 64-bits-          | Udf                        -- undefined-          | Nul-          | Todo                       -- FIXME+data Term   = Term `Add` Term+            | Term `BitAnd` Term+            | Term `BitExclOr` Term+            | Term `BitOr` Term+            | Term `BitTest` Term+            | Term `DivideIntQuotient` Term+            | Term `DivideIntRemainder` Term+            | Term `Subtract` Term+            | SignExtend Term+            | If Term Term Term          -- cond; true; false+            | Flag Char Term             -- source of Assign+            -- terminals+            | Opr Int Operand            -- Operand: Int is width+            | OprA Int Operand           -- same as Opr, except gets address instead of val (for lea)+            | Stk Int Int                -- offset from rsp, width+            | Reg Register+            | Flg Char                   -- target of Assign+            | Con Int                    -- constant; assumed to be 64-bits+            | Udf                        -- undefined+            | Todo String                -- FIXME      deriving (Show) -type Assign = (Term, Term)-+type Assign = (Term, Term)             -- (read, write) +{-+restrictBits+   :: Int+   -> Int+   -> Term+   -> Term+restrictBits a b (Reg r) = Reg $ R.restrictBits a b r+restrictBits _ _ t = error $ "Term.restrictBits: " ++ show t+-} +defines+   :: Term+   -> [C.Cell]+defines (Opr w op) = O.defines w op+defines (Stk a b ) = [C.Stk b a]+defines (Reg r   ) = [C.Reg r  ]+defines (Flg f   ) = [C.Flg f  ]+defines t          = error $ "Term.defines: " ++ show t
src/Bindings/Bfd/Symbol.hsc view
@@ -40,21 +40,27 @@    , Symbol' ) where -import Data.Bits-import Data.Word+import Data.Bits ( (.&.), bit )+import Data.Word ( Word ) -import Foreign.C-import Foreign.Ptr-import Foreign.Storable+import Foreign.C        ( CString, CUInt, newCString, peekCString )+import Foreign.Ptr      ( Ptr, wordPtrToPtr )+import Foreign.Storable ( Storable, alignment, peekByteOff, pokeByteOff, sizeOf ) -import System.Posix.IO+import System.Posix.IO ( FdOption(NonBlockingRead), closeFd, createPipe, fdRead+                       , setFdOption ) -import {-# SOURCE #-} Bindings.Bfd              as Bfd-import                Bindings.Bfd.Flavour-import                Bindings.Bfd.Misc-import {-# SOURCE #-} Bindings.Bfd.Section      as Section-import                Bindings.Bfd.Symbol.Flags as SymbolFlags-import                Bindings.Bfd.Target       as Target+import {-# SOURCE #-} Bindings.Bfd              as Bfd         ( Bfd, Bfd'+                                                               , getPrintSymbol+                                                               , getTarget, mk)+import                Bindings.Bfd.Flavour                     ( Flavour(Unknown) )+import                Bindings.Bfd.Misc                        ( Vma, c_fdopen+                                                               , c_fflush )+import {-# SOURCE #-} Bindings.Bfd.Section      as Section     ( Section+                                                               , getOutputSection+                                                               , getVma )+import                Bindings.Bfd.Symbol.Flags as SymbolFlags ( Flags(Local, Synthetic) )+import                Bindings.Bfd.Target       as Target      ( getFlavour )  #include <bfd.h> @@ -294,8 +300,7 @@       mode <- newCString "w"       fpWrite <- c_fdopen pipeWrite' mode -      xvec <- getTarget bfd-      f    <- getPrintSymbol xvec bfd fpWrite sym+      f    <- getPrintSymbol bfd fpWrite sym        f       _ <- c_fflush fpWrite
src/Bindings/Bfd/SymbolTable.hs view
@@ -90,8 +90,13 @@        sects <- getSections bfd       let-         lastSect = last sects-      lastSectVma  <- getVma lastSect+         f (v,rs) s =+            do+               v' <- Section.getVma s+               case v' > v of+                  True  -> return (v',s )+                  False -> return (v ,rs)+      (lastSectVma,lastSect) <- foldM f (0,externsSect) sects       lastSectSize <- Section.getSize lastSect        let
src/Bindings/Bfd/Target.hs-boot view
@@ -15,10 +15,14 @@ -- You should have received a copy of the GNU Lesser General Public License -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>. -module Bindings.Bfd.Target where+module Bindings.Bfd.Target (+     Target+   , Target'+   , TargetName+) where -import Foreign.Ptr-import Foreign.Storable+import Foreign.Ptr      ( Ptr )+import Foreign.Storable ( Storable )   type TargetName = String
src/Bindings/Bfd/Target.hsc view
@@ -15,161 +15,81 @@ -- You should have received a copy of the GNU Lesser General Public License -- along with Bindings-bfd.  If not, see <http://www.gnu.org/licenses/>. --- | The "Target" represents a particular back-end used to interpret the "Bfd".+-- | The "Target" represents a particular back-end used to interpret the Binary+-- File Descriptor (BFD).  A 'Bfd' handle will be associated with exactly one+-- 'Target' as set in the 'open' function. module Bindings.Bfd.Target (    -- * Types      Target    , TargetName    -- * Platform    , listSupported+   , find    , setDefault-   -- * Byte Order+   -- * Attributes+   , getFlavour+   , getName+   -- ** Byte Order    , getByteorder    , getHeaderByteorder-   -- *+   -- ** Flags    , getObjectFlags    , getSectionFlags-   , Bindings.Bfd.Target.getFlavour-   , getName-   -- ** Symtabs-   , getSymtabUpperBound-   , canonicalizeSymtab-   , getDynamicSymtabUpperBound-   , canonicalizeDynamicSymtab-   , getSyntheticSymtab-   -- ** Relocations-   , getDynamicRelocUpperBound-   , canonicalizeDynamicReloc    -- * Testing+   , isCoffFamily    -- ** Byte Order    , isBigEndian    , isLittleEndian    , isHeaderBigEndian    , isHeaderLittleEndian-   -- ** Coff Family-   , isCoffFamily-   -- *-   , getPrintSymbol    -- * Internal    , Target'+   , unTarget'CanonicalizeDynamicReloc+   , unTarget'CanonicalizeDynamicSymtab+   , unTarget'CanonicalizeSymtab+   , unTarget'GetDynamicRelocUpperBound+   , unTarget'GetDynamicSymtabUpperBound+   , unTarget'GetSymtabUpperBound+   , unTarget'GetSyntheticSymtab+   , unTarget'PrintSymbol ) where -import Data.Bits-import Data.Word+import Data.Bits ( (.&.), bit )+import Data.Word ( Word ) -import Foreign.C-import Foreign.Marshal-import Foreign.Ptr-import Foreign.Storable+import Foreign.C        ( CInt, CLong, CString, CUInt, newCString, peekCString+                        , withCString )+import Foreign.Marshal  ( free, peekArray0, toBool )+import Foreign.Ptr      ( FunPtr, Ptr, castPtrToFunPtr, nullPtr, wordPtrToPtr )+import Foreign.Storable ( Storable, alignment, peekByteOff, sizeOf ) -import {-# SOURCE #-} Bindings.Bfd-import                Bindings.Bfd.Endian-import                Bindings.Bfd.Exception-import                Bindings.Bfd.Flags         as BfdFlags-import                Bindings.Bfd.Flavour-import                Bindings.Bfd.Misc-import {-# SOURCE #-} Bindings.Bfd.Relocation-import                Bindings.Bfd.Section.Flags as SectionFlags-import {-# SOURCE #-} Bindings.Bfd.Symbol        as Symbol-import {-# SOURCE #-} Bindings.Bfd.SymbolTable+import {-# SOURCE #-} Bindings.Bfd                               ( Bfd, Bfd'+                                                                 , ptr )+import                Bindings.Bfd.Endian                        ( Endian(..) )+import                Bindings.Bfd.Exception                     ( throwExceptionIfFalse)+import                Bindings.Bfd.Flags         as BfdFlags     ( Flags(HasReloc) )+import                Bindings.Bfd.Flavour                       ( Flavour(Coff, Xcoff) )+import                Bindings.Bfd.Misc                          ( File )+import {-# SOURCE #-} Bindings.Bfd.Relocation                    ( Relocation )+import                Bindings.Bfd.Section.Flags as SectionFlags ( Flags(Alloc) ) +import {-# SOURCE #-} Bindings.Bfd.Symbol        as Symbol       ( Symbol )  #include <bfd.h>  -type TargetName = String+-- ### PUBLIC ################################################################## +-- === Types ===================================================================+ type Target = Ptr Target' -data Target' = Name                       TargetName-             | Flavour                    Flavour-             | Byteorder                  Endian-             | HeaderByteorder            Endian-             | ObjectFlags                [BfdFlags.Flags]-             | SectionFlags               [SectionFlags.Flags]-             | GetSymtabUpperBound        (FunPtr (Ptr Bfd' -> IO CLong))-             | CanonicalizeSymtab         (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))-             | PrintSymbol                (FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()))-             | GetDynamicSymtabUpperBound (FunPtr (Ptr Bfd' -> IO CLong))-             | CanonicalizeDynamicSymtab  (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))-             | GetSyntheticSymtab         (FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong))-             | GetDynamicRelocUpperBound  (FunPtr (Ptr Bfd' -> IO CLong))-             | CanonicalizeDynamicReloc   (FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong))-     deriving (Show)+type TargetName = String -instance Storable Target' where-   sizeOf _ = #size struct bfd_target-   alignment = sizeOf-   peekByteOff buf off-      | off == (#offset struct bfd_target, name) =-         do-            val <- (#peek struct bfd_target, name) buf-            s   <- peekCString val-            return $ Bindings.Bfd.Target.Name s-      | off == (#offset struct bfd_target, flavour) =-         do-            val <- (#peek struct bfd_target, flavour) buf :: IO CUInt-            return $ Flavour $ toEnum $ fromIntegral val-      | off == (#offset struct bfd_target, byteorder) =-         do-            val <- (#peek struct bfd_target, byteorder) buf :: IO CUInt-            return $ Byteorder $ toEnum $ fromIntegral val-      | off == (#offset struct bfd_target, header_byteorder) =-         do-            val <- (#peek struct bfd_target, header_byteorder) buf :: IO CUInt-            return $ HeaderByteorder $ toEnum $ fromIntegral val-      | off == (#offset struct bfd_target, object_flags) =-         do-            val <- (#peek struct bfd_target, object_flags) buf :: IO CUInt-            let-               flags = filter f $ enumFrom HasReloc-                  where-                     f e = val .&. (bit $ fromEnum e) /= 0-            return $ ObjectFlags flags-      | off == (#offset struct bfd_target, section_flags) =-         do-            val <- (#peek struct bfd_target, section_flags) buf :: IO CUInt-            let-               flags = filter f $ enumFrom Alloc-                  where-                     f e = val .&. (bit $ fromEnum e) /= 0-            return $ SectionFlags flags-      | off == (#offset struct bfd_target, _bfd_get_symtab_upper_bound) =-         do-            val <- (#peek struct bfd_target, _bfd_get_symtab_upper_bound) buf :: IO Word-            return $ GetSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_canonicalize_symtab) =-         do-            val <- (#peek struct bfd_target, _bfd_canonicalize_symtab) buf :: IO Word-            return $ CanonicalizeSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_print_symbol) =-         do-            val <- (#peek struct bfd_target, _bfd_print_symbol) buf :: IO Word-            return $ PrintSymbol $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) =-         do-            val <- (#peek struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) buf :: IO Word-            return $ GetDynamicSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab) =-         do-            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_symtab) buf :: IO Word-            return $ CanonicalizeDynamicSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_get_synthetic_symtab) =-         do-            val <- (#peek struct bfd_target, _bfd_get_synthetic_symtab) buf :: IO Word-            return $ GetSyntheticSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) =-         do-            val <- (#peek struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) buf :: IO Word-            return $ GetDynamicRelocUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc) =-         do-            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_reloc) buf :: IO Word-            return $ CanonicalizeDynamicReloc $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val-      | otherwise = error $ "internal error: Bfd.Target.peekByteOff " ++ show off +-- --- Platform and Bfd ======================================================== --- | Return a list of target names that can possibly be interpreted by this--- particular platform.+-- | Returns the /Platform Target List/; that is, the target names that are +-- supported by the platform that /libbfd/ was compiled for. listSupported    :: IO [TargetName] listSupported = @@ -181,49 +101,44 @@       free pts                       -- FIXME is this dodgy?       return res --- | Set the default target name for use with 'open' etc. when 'TargetName' is--- equal to \"default\" or empty.  Returns 'True' if successful.+-- | Returns a handle to the target named 'TargetName'.  If /target/ is +-- 'Nothing', choose the one in the environment variable /GNUTARGET/; if that is+-- null or not defined, then choose the first entry in the /Platform Target List/+-- (see 'listSupported').+-- +-- Passing the 'String' \"default\" as /target/ or setting the environment+-- variable to \"default\" will cause the /Default Target/ to be returned (see +-- 'setDefault'), and the fact that the target is defaulted will be set in the+-- BFD if /bfd/ isn't 'Nothing'.  This will cause 'checkFormat' to loop over all+-- the targets to find the one that matches the file being read.+find+   :: Maybe TargetName -- ^ target+   -> Maybe Bfd        -- ^ bfd+   -> IO Target+find mbTarg mbBfd =+   do+      targ <- maybe (return nullPtr) (\t -> newCString t) mbTarg+      let+         bfd = maybe nullPtr (\b -> ptr b) mbBfd+      r <- c_bfd_find_target targ bfd+      free targ+      return r++-- | Set the /Default Target/ for use when 'TargetName' is equal to \"default\"+-- or 'Nothing' in the 'find' and 'open' functions. -- -- /Possible exceptions:/ 'InvalidTarget' setDefault    :: TargetName-   -> IO Bool+   -> IO () setDefault tn =    do       r <- withCString tn (\s -> c_bfd_set_default_target s)-      throwExceptionIfFalse "setDefault" tn (return $ toBool r)+      _ <- throwExceptionIfFalse "setDefault" tn (return $ toBool r)+      return () -getByteorder-   :: Target-   -> IO Endian-getByteorder targ =-   do-      bo <- peekByteOff targ (#offset struct bfd_target, byteorder)-      return $ unTarget'Byteorder bo -getHeaderByteorder-   :: Target-   -> IO Endian-getHeaderByteorder targ =-   do-      bo <- peekByteOff targ (#offset struct bfd_target, header_byteorder)-      return $ unTarget'HeaderByteorder bo--getObjectFlags-   :: Target-   -> IO [BfdFlags.Flags]-getObjectFlags targ =-   do-      f <- peekByteOff targ (#offset struct bfd_target, object_flags)-      return $ unTarget'ObjectFlags f--getSectionFlags-   :: Target-   -> IO [SectionFlags.Flags]-getSectionFlags targ =-   do-      f <- peekByteOff targ (#offset struct bfd_target, section_flags)-      return $ unTarget'SectionFlags f+-- === Attributes ==============================================================  getFlavour    :: Target@@ -243,91 +158,54 @@          tn' = unTarget'Name tn       return tn' +-- Byte Order ------------------------------------------------------------------ -getSymtabUpperBound+getByteorder    :: Target-   -> Bfd-   -> IO Int-getSymtabUpperBound targ bfd =+   -> IO Endian+getByteorder targ =    do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_symtab_upper_bound)-      r <- d_Bfd_CLong (unTarget'GetSymtabUpperBound fn) $ ptr bfd-      return $ fromIntegral r+      bo <- peekByteOff targ (#offset struct bfd_target, byteorder)+      return $ unTarget'Byteorder bo -canonicalizeSymtab+getHeaderByteorder    :: Target-   -> Bfd-   -> Ptr Symbol-   -> IO Int-canonicalizeSymtab targ bfd ps =+   -> IO Endian+getHeaderByteorder targ =    do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_symtab)-      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeSymtab fn) (ptr bfd) ps-      return $ fromIntegral r+      bo <- peekByteOff targ (#offset struct bfd_target, header_byteorder)+      return $ unTarget'HeaderByteorder bo -getDynamicSymtabUpperBound-   :: Target-   -> Bfd-   -> IO Int-getDynamicSymtabUpperBound targ bfd =-   do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound)-      r <- d_Bfd_CLong (unTarget'GetDynamicSymtabUpperBound fn) (ptr bfd)-      return $ fromIntegral r+-- Flags ----------------------------------------------------------------------- -canonicalizeDynamicSymtab+getObjectFlags    :: Target-   -> Bfd-   -> Ptr Symbol-   -> IO Int-canonicalizeDynamicSymtab targ bfd ps =+   -> IO [BfdFlags.Flags]+getObjectFlags targ =    do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab)-      r <- d_Bfd_PtrSymbol_CLong (unTarget'CanonicalizeDynamicSymtab fn) (ptr bfd) ps-      return $ fromIntegral r+      f <- peekByteOff targ (#offset struct bfd_target, object_flags)+      return $ unTarget'ObjectFlags f -getSyntheticSymtab+getSectionFlags    :: Target-   -> Bfd-   -> SymbolTable-   -> SymbolTable-   -> Ptr Symbol-   -> IO Int-getSyntheticSymtab targ bfd sst dst synth =+   -> IO [SectionFlags.Flags]+getSectionFlags targ =    do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_synthetic_symtab)-      r <- d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong (fn' fn) (ptr bfd) sts stp dts dtp synth-      return $ fromIntegral r-   where-      fn' = unTarget'GetSyntheticSymtab-      sts = fromIntegral $ tableSize sst-      stp = tablePtr sst-      dts = fromIntegral $ tableSize dst-      dtp = tablePtr dst+      f <- peekByteOff targ (#offset struct bfd_target, section_flags)+      return $ unTarget'SectionFlags f -getDynamicRelocUpperBound-   :: Target-   -> Bfd-   -> IO Int-getDynamicRelocUpperBound targ bfd =-   do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound)-      r <- d_Bfd_CLong (unTarget'GetDynamicRelocUpperBound fn) (ptr bfd)-      return $ fromIntegral r+-- Testing ===================================================================== -canonicalizeDynamicReloc+-- | Returns 'True' if the 'Flavour' of the 'Target' is either 'Coff' or 'Xcoff'.+--  Otherwise 'False'.+isCoffFamily    :: Target-   -> Bfd-   -> Ptr (Ptr Relocation)-   -> Ptr Symbol-   -> IO Int-canonicalizeDynamicReloc targ bfd rels syms =+   -> IO Bool+isCoffFamily targ =    do-      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc)-      r <- d_Bfd_PtrPtrRelocation_PtrSymbol_CLong (unTarget'CanonicalizeDynamicReloc fn) (ptr bfd) rels syms-      return $ fromIntegral r+      flav <- getFlavour targ+      return $ flav == Coff || flav == Xcoff --- Testing ===================================================================== -- Byte Order ------------------------------------------------------------------  -- | Returns 'True' if the 'Target's byte order (see 'getByteorder') is 'Big'.@@ -370,20 +248,145 @@       bo <- getHeaderByteorder targ       return $ bo == Little --- Coff Family -----------------------------------------------------------------+-- Internal ==================================================================== --- | Returns 'True' if the 'Flavour' of the 'Target' is either 'Coff' or 'Xcoff'.---  Otherwise 'False'.-isCoffFamily-   :: Target-   -> IO Bool-isCoffFamily targ =-   do-      flav <- getFlavour targ-      return $ flav == Coff || flav == Xcoff+data Target' = Name                       TargetName+             | Flavour                    Flavour+             | Byteorder                  Endian+             | HeaderByteorder            Endian+             | ObjectFlags                [BfdFlags.Flags]+             | SectionFlags               [SectionFlags.Flags]+             | GetSymtabUpperBound        (FunPtr (Ptr Bfd' -> IO CLong))+             | CanonicalizeSymtab         (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))+             | PrintSymbol                (FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()))+             | GetDynamicSymtabUpperBound (FunPtr (Ptr Bfd' -> IO CLong))+             | CanonicalizeDynamicSymtab  (FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong))+             | GetSyntheticSymtab         (FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong))+             | GetDynamicRelocUpperBound  (FunPtr (Ptr Bfd' -> IO CLong))+             | CanonicalizeDynamicReloc   (FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong))+     deriving (Show) --- -----------------------------------------------------------------------------+instance Storable Target' where+   sizeOf _ = #size struct bfd_target+   alignment = sizeOf+   peekByteOff buf off+      | off == (#offset struct bfd_target, name) =+         do+            val <- (#peek struct bfd_target, name) buf+            s   <- peekCString val+            return $ Bindings.Bfd.Target.Name s+      | off == (#offset struct bfd_target, flavour) =+         do+            val <- (#peek struct bfd_target, flavour) buf :: IO CUInt+            return $ Flavour $ toEnum $ fromIntegral val+      | off == (#offset struct bfd_target, byteorder) =+         do+            val <- (#peek struct bfd_target, byteorder) buf :: IO CUInt+            return $ Byteorder $ toEnum $ fromIntegral val+      | off == (#offset struct bfd_target, header_byteorder) =+         do+            val <- (#peek struct bfd_target, header_byteorder) buf :: IO CUInt+            return $ HeaderByteorder $ toEnum $ fromIntegral val+      | off == (#offset struct bfd_target, object_flags) =+         do+            val <- (#peek struct bfd_target, object_flags) buf :: IO CUInt+            let+               flags = filter f $ enumFrom HasReloc+                  where+                     f e = val .&. (bit $ fromEnum e) /= 0+            return $ ObjectFlags flags+      | off == (#offset struct bfd_target, section_flags) =+         do+            val <- (#peek struct bfd_target, section_flags) buf :: IO CUInt+            let+               flags = filter f $ enumFrom Alloc+                  where+                     f e = val .&. (bit $ fromEnum e) /= 0+            return $ SectionFlags flags+      | off == (#offset struct bfd_target, _bfd_get_symtab_upper_bound) =+         do+            val <- (#peek struct bfd_target, _bfd_get_symtab_upper_bound) buf :: IO Word+            return $ GetSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_canonicalize_symtab) =+         do+            val <- (#peek struct bfd_target, _bfd_canonicalize_symtab) buf :: IO Word+            return $ CanonicalizeSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_print_symbol) =+         do+            val <- (#peek struct bfd_target, _bfd_print_symbol) buf :: IO Word+            return $ PrintSymbol $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) =+         do+            val <- (#peek struct bfd_target, _bfd_get_dynamic_symtab_upper_bound) buf :: IO Word+            return $ GetDynamicSymtabUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_symtab) =+         do+            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_symtab) buf :: IO Word+            return $ CanonicalizeDynamicSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_get_synthetic_symtab) =+         do+            val <- (#peek struct bfd_target, _bfd_get_synthetic_symtab) buf :: IO Word+            return $ GetSyntheticSymtab $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) =+         do+            val <- (#peek struct bfd_target, _bfd_get_dynamic_reloc_upper_bound) buf :: IO Word+            return $ GetDynamicRelocUpperBound $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | off == (#offset struct bfd_target, _bfd_canonicalize_dynamic_reloc) =+         do+            val <- (#peek struct bfd_target, _bfd_canonicalize_dynamic_reloc) buf :: IO Word+            return $ CanonicalizeDynamicReloc $ castPtrToFunPtr $ wordPtrToPtr $ fromIntegral val+      | otherwise = error $ "internal error: Bfd.Target.peekByteOff " ++ show off +unTarget'CanonicalizeDynamicReloc+   :: Target'+   -> FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)+unTarget'CanonicalizeDynamicReloc (CanonicalizeDynamicReloc fn) = fn+unTarget'CanonicalizeDynamicReloc _                             = error "unTarget'CanonicalizeDynamicReloc"++unTarget'CanonicalizeDynamicSymtab+   :: Target'+   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)+unTarget'CanonicalizeDynamicSymtab (CanonicalizeDynamicSymtab fn) = fn+unTarget'CanonicalizeDynamicSymtab _                              = error "unTarget'CanonicalizeDynamicSymtab"++unTarget'CanonicalizeSymtab+   :: Target'+   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)+unTarget'CanonicalizeSymtab (CanonicalizeSymtab fn) = fn+unTarget'CanonicalizeSymtab _                       = error "unTarget'CanonicalizeSymtab"++unTarget'GetDynamicRelocUpperBound+   :: Target'+   -> FunPtr (Ptr Bfd' -> IO CLong)+unTarget'GetDynamicRelocUpperBound (GetDynamicRelocUpperBound fn) = fn+unTarget'GetDynamicRelocUpperBound _                              = error "unTarget'GetDynamicRelocUpperBound"++unTarget'GetDynamicSymtabUpperBound+   :: Target'+   -> FunPtr (Ptr Bfd' -> IO CLong)+unTarget'GetDynamicSymtabUpperBound (GetDynamicSymtabUpperBound fn) = fn+unTarget'GetDynamicSymtabUpperBound _                               = error "unTarget'GetDynamicSymtabUpperBound"++unTarget'GetSymtabUpperBound+   :: Target'+   -> FunPtr (Ptr Bfd' -> IO CLong)+unTarget'GetSymtabUpperBound (GetSymtabUpperBound fn) = fn+unTarget'GetSymtabUpperBound _                        = error "unTarget'GetSymtabUpperBound"++unTarget'GetSyntheticSymtab+   :: Target'+   -> FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)+unTarget'GetSyntheticSymtab (GetSyntheticSymtab fn) = fn+unTarget'GetSyntheticSymtab _                       = error "unTarget'GetSyntheticSymtab"++unTarget'PrintSymbol+   :: Target'+   -> FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())+unTarget'PrintSymbol (PrintSymbol fn) = fn+unTarget'PrintSymbol x                = error $ "internal error: unXVec2 " ++ show x++-- PRIVATE #####################################################################+ unTarget'Name    :: Target'    -> TargetName@@ -420,93 +423,17 @@ unTarget'SectionFlags (SectionFlags b) = b unTarget'SectionFlags _                = error "unTarget'SectionFlags" -unTarget'GetSymtabUpperBound-   :: Target'-   -> FunPtr (Ptr Bfd' -> IO CLong)-unTarget'GetSymtabUpperBound (GetSymtabUpperBound fn) = fn-unTarget'GetSymtabUpperBound _                        = error "unTarget'GetSymtabUpperBound"--unTarget'CanonicalizeSymtab-   :: Target'-   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)-unTarget'CanonicalizeSymtab (CanonicalizeSymtab fn) = fn-unTarget'CanonicalizeSymtab _                       = error "unTarget'CanonicalizeSymtab"--unTarget'GetDynamicSymtabUpperBound-   :: Target'-   -> FunPtr (Ptr Bfd' -> IO CLong)-unTarget'GetDynamicSymtabUpperBound (GetDynamicSymtabUpperBound fn) = fn-unTarget'GetDynamicSymtabUpperBound _                               = error "unTarget'GetDynamicSymtabUpperBound"--unTarget'CanonicalizeDynamicSymtab-   :: Target'-   -> FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)-unTarget'CanonicalizeDynamicSymtab (CanonicalizeDynamicSymtab fn) = fn-unTarget'CanonicalizeDynamicSymtab _                              = error "unTarget'CanonicalizeDynamicSymtab"--unTarget'GetSyntheticSymtab-   :: Target'-   -> FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)-unTarget'GetSyntheticSymtab (GetSyntheticSymtab fn) = fn-unTarget'GetSyntheticSymtab _                       = error "unTarget'GetSyntheticSymtab"--unTarget'GetDynamicRelocUpperBound-   :: Target'-   -> FunPtr (Ptr Bfd' -> IO CLong)-unTarget'GetDynamicRelocUpperBound (GetDynamicRelocUpperBound fn) = fn-unTarget'GetDynamicRelocUpperBound _                              = error "unTarget'GetDynamicRelocUpperBound"--unTarget'CanonicalizeDynamicReloc-   :: Target'-   -> FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)-unTarget'CanonicalizeDynamicReloc (CanonicalizeDynamicReloc fn) = fn-unTarget'CanonicalizeDynamicReloc _                             = error "unTarget'CanonicalizeDynamicReloc"--unXVec2-   :: Target'-   -> FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())-unXVec2 (PrintSymbol fn) = fn-unXVec2 x                = error $ "internal error: unXVec2 " ++ show x---getPrintSymbol-   :: Target-   -> Bfd-   -> File-   -> Symbol-   -> IO (IO ())-getPrintSymbol targ bfd file sym =-   do -      fn <- peekByteOff targ (#offset struct bfd_target, _bfd_print_symbol)-      let-         f = d_Bfd_File_Symbol_CUInt_Void (unXVec2 fn) (ptr bfd) file sym 2-      return f---- -----------------------------------------------------------------------------+-- Foreign ---------------------------------------------------------------------  foreign import ccall unsafe "bfd.h bfd_target_list" c_bfd_target_list    :: Ptr CString +foreign import ccall unsafe "bfd.h bfd_find_target" c_bfd_find_target+   :: CString+   -> Ptr Bfd'+   -> IO Target+ foreign import ccall unsafe "bfd.h bfd_set_default_target" c_bfd_set_default_target    :: CString    -> IO CInt -foreign import ccall unsafe "dynamic" d_Bfd_CLong-   :: FunPtr (Ptr Bfd' -> IO CLong)-   -> (Ptr Bfd' -> IO CLong)--foreign import ccall unsafe "dynamic" d_Bfd_CLong_PtrSymbol_CLong_PtrSymbol_PtrSymbol_CLong-   :: FunPtr (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong) -   -> (Ptr Bfd' -> CLong -> Ptr Symbol -> CLong -> Ptr Symbol -> Ptr Symbol -> IO CLong)--foreign import ccall unsafe "dynamic" d_Bfd_PtrSymbol_CLong-   :: FunPtr (Ptr Bfd' -> Ptr Symbol -> IO CLong)-   -> (Ptr Bfd' -> Ptr Symbol -> IO CLong)--foreign import ccall unsafe "dynamic" d_Bfd_PtrPtrRelocation_PtrSymbol_CLong-   :: FunPtr (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong) -   -> (Ptr Bfd' -> Ptr (Ptr Relocation) -> Ptr Symbol -> IO CLong)--foreign import ccall unsafe "dynamic" d_Bfd_File_Symbol_CUInt_Void-   :: FunPtr (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ()) -   -> (Ptr Bfd' -> File -> Symbol -> CUInt -> IO ())