diff --git a/api-tools.cabal b/api-tools.cabal
--- a/api-tools.cabal
+++ b/api-tools.cabal
@@ -1,5 +1,5 @@
 Name:                api-tools
-Version:             0.5.2
+Version:             0.8.0.1
 Synopsis:            DSL for generating API boilerplate and docs
 Description:         api-tools provides a compact DSL for describing an API.
                      It uses Template Haskell to generate the
@@ -25,24 +25,32 @@
 Source-Repository this
   Type:              git
   Location:          git://github.com/iconnect/api-tools.git
-  Tag:               0.5.2
+  Tag:               0.8.0.0
 
+flag time15
+  default: True
+
 Library
   Hs-Source-Dirs:    src
 
   Exposed-modules:
         Data.API.API
+        Data.API.API.DSL
         Data.API.API.Gen
         Data.API.Changes
+        Data.API.Changes.Types
         Data.API.Doc
         Data.API.Doc.Subst
+        Data.API.Error
         Data.API.JSON
+        Data.API.JSONToCBOR
         Data.API.Markdown
         Data.API.NormalForm
         Data.API.Parse
         Data.API.PP
         Data.API.TH
         Data.API.Tools
+        Data.API.Tools.CBOR
         Data.API.Tools.Combinators
         Data.API.Tools.Datatypes
         Data.API.Tools.DeepSeq
@@ -57,38 +65,52 @@
         Data.API.Tutorial
         Data.API.Types
         Data.API.Utils
+        Data.API.Value
+        Data.Binary.Serialise.CBOR.Extra
+        Data.Binary.Serialise.CBOR.JSON
 
   Other-modules:
-        Data.API.API.DSL
         Data.API.Doc.Call
         Data.API.Doc.Dir
         Data.API.Doc.Types
         Data.API.Scan
+        Data.API.TH.Compat
 
   Build-depends:
         Cabal                >= 1.4      && < 2    ,
-        QuickCheck           >= 2.5.1    && < 2.8  ,
-        aeson                >= 0.6.2    && < 0.9  ,
-        aeson-pretty         >= 0.1      && < 0.8  ,
+        QuickCheck           >= 2.5.1    && < 2.10 ,
+        aeson                >= 0.10     && < 1.3  ,
+        aeson-pretty         >= 0.1      && < 0.9  ,
         array                >= 0.4      && < 0.6  ,
-        attoparsec           >= 0.10.4   && < 0.13 ,
+        attoparsec           >= 0.10.4   && < 0.14 ,
         base                 >= 4        && < 5    ,
+        base16-bytestring    >= 0.1      && < 0.2  ,
         base64-bytestring    >= 1.0      && < 1.1  ,
+        binary,
         bytestring           >= 0.9      && < 0.11 ,
         case-insensitive     >= 1.0      && < 1.3  ,
+        cborg                >= 0.1.1.0  && < 0.2  ,
         containers           >= 0.5      && < 0.6  ,
-        deepseq              >= 1.1      && < 1.4  ,
-        lens                 >= 3.8.7    && < 4.4  ,
-        old-locale           >= 1.0.0.4  && < 1.1  ,
+        deepseq              >= 1.1      && < 1.5  ,
+        lens                 >= 3.8.7    && < 4.16 ,
         regex-compat-tdfa    >= 0.95.1   && < 0.96 ,
         safe                 >= 0.3.3    && < 0.4  ,
-        safecopy             >= 0.8.1    && < 0.9  ,
-        time                 >= 1.4      && < 1.5  ,
-        template-haskell     >= 2.7      && < 2.10 ,
-        text                 >= 0.11.3   && < 1.2  ,
+        safecopy             >= 0.8.1    && < 0.10 ,
+        scientific           >= 0.3      && < 0.4  ,
+        serialise            >= 0.1.0.0  && < 0.2  ,
+        template-haskell     >= 2.7      && < 2.12 ,
+        text                 >= 0.11.3   && < 1.3  ,
         unordered-containers >= 0.2.3.0  && < 0.3  ,
-        vector               >= 0.10.0.1 && < 0.11
+        vector               >= 0.10.0.1 && < 0.12
 
+  if flag(time15)
+    Build-depends:
+        time                 >= 1.5.0    && < 1.7
+  else
+    Build-depends:
+        old-locale           >= 1        && < 1.1,
+        time                 >= 1.1.4    && < 1.5
+
   Build-tools:
         alex,
         happy
@@ -107,26 +129,24 @@
 
   Build-depends:
         api-tools,
-        QuickCheck           >= 2.5.1    && < 2.8  ,
-        aeson                >= 0.6.2    && < 0.9  ,
-        aeson-pretty         >= 0.1      && < 0.8  ,
+        QuickCheck           >= 2.5.1    && < 2.10 ,
+        aeson                                      ,
+        aeson-pretty         >= 0.1      && < 0.9  ,
         array                >= 0.4      && < 0.6  ,
-        attoparsec           >= 0.10.4   && < 0.13 ,
+        attoparsec           >= 0.10.4   && < 0.14 ,
         base                 >= 4        && < 5    ,
         base64-bytestring    >= 1.0      && < 1.1  ,
         bytestring           >= 0.9      && < 0.11 ,
         case-insensitive     >= 1.0      && < 1.3  ,
         containers           >= 0.5      && < 0.6  ,
-        lens                 >= 3.8.7    && < 4.4  ,
-        old-locale           >= 1.0.0.4  && < 1.1  ,
+        lens                 >= 3.8.7    && < 4.16 ,
         regex-compat-tdfa    >= 0.95.1   && < 0.96 ,
         safe                 >= 0.3.3    && < 0.4  ,
-        safecopy             >= 0.8.1    && < 0.9  ,
-        time                 >= 1.4      && < 1.5  ,
-        template-haskell     >= 2.7      && < 2.10 ,
-        text                 >= 0.11.3   && < 1.2  ,
+        safecopy             >= 0.8.1    && < 0.10 ,
+        template-haskell     >= 2.7      && < 2.12 ,
+        text                 >= 0.11.3   && < 1.3  ,
         unordered-containers >= 0.2.3.0  && < 0.3  ,
-        vector               >= 0.10.0.1 && < 0.11
+        vector               >= 0.10.0.1 && < 0.12
 
   GHC-Options:
         -main-is Data.API.MigrationTool
@@ -136,6 +156,45 @@
   Default-Language: Haskell2010
 
 
+Executable perf-test
+  Hs-Source-Dirs:    main
+
+  Main-is:    Data/API/PerfTest.hs
+
+  Build-depends:
+        api-tools,
+        QuickCheck           >= 2.5.1    && < 2.10 ,
+        aeson                                      ,
+        aeson-pretty         >= 0.1      && < 0.9  ,
+        array                >= 0.4      && < 0.6  ,
+        attoparsec           >= 0.10.4   && < 0.14 ,
+        base                 >= 4        && < 5    ,
+        base64-bytestring    >= 1.0      && < 1.1  ,
+        bytestring           >= 0.9      && < 0.11 ,
+        case-insensitive     >= 1.0      && < 1.3  ,
+        cborg                >= 0.1.1.0  && < 0.2  ,
+        containers           >= 0.5      && < 0.6  ,
+        deepseq              >= 1.1      && < 1.5  ,
+        lens                 >= 3.8.7    && < 4.16 ,
+        regex-compat-tdfa    >= 0.95.1   && < 0.96 ,
+        safe                 >= 0.3.3    && < 0.4  ,
+        safecopy             >= 0.8.1    && < 0.10 ,
+        serialise            >= 0.1.0.0  && < 0.2  ,
+        template-haskell     >= 2.7      && < 2.12 ,
+        text                 >= 0.11.3   && < 1.3  ,
+        unordered-containers >= 0.2.3.0  && < 0.3  ,
+        vector               >= 0.10.0.1 && < 0.12,
+        time
+
+  GHC-Options:
+        -main-is Data.API.PerfTest
+        -Wall
+        -fwarn-tabs
+        -rtsopts
+
+  Default-Language: Haskell2010
+
+
 Test-Suite test-api-tools
   Hs-Source-Dirs:    tests
 
@@ -153,29 +212,30 @@
   Build-depends:
         api-tools,
         Cabal                >= 1.4      && < 2    ,
-        QuickCheck           >= 2.5.1    && < 2.8  ,
-        aeson                >= 0.6.2    && < 0.9  ,
-        aeson-pretty         >= 0.1      && < 0.8  ,
+        QuickCheck           >= 2.5.1    && < 2.10 ,
+        aeson                                      ,
+        aeson-pretty         >= 0.1      && < 0.9  ,
         array                >= 0.4      && < 0.6  ,
-        attoparsec           >= 0.10.4   && < 0.13 ,
+        attoparsec           >= 0.10.4   && < 0.14 ,
         base                 >= 4        && < 5    ,
         base64-bytestring    >= 1.0      && < 1.1  ,
         bytestring           >= 0.9      && < 0.11 ,
         case-insensitive     >= 1.0      && < 1.3  ,
+        cborg                >= 0.1.1.0  && < 0.2  ,
         containers           >= 0.5      && < 0.6  ,
-        lens                 >= 3.8.7    && < 4.4  ,
-        old-locale           >= 1.0.0.4  && < 1.1  ,
+        lens                 >= 3.8.7    && < 4.16 ,
         regex-compat-tdfa    >= 0.95.1   && < 0.96 ,
         safe                 >= 0.3.3    && < 0.4  ,
-        safecopy             >= 0.8.1    && < 0.9  ,
-        tasty                >= 0.3      && < 0.9  ,
-        tasty-hunit          >= 0.2      && < 0.9  ,
+        safecopy             >= 0.8.1    && < 0.10 ,
+        serialise            >= 0.1.0.0  && < 0.2  ,
+        tasty                >= 0.10.1   && < 0.12 ,
+        tasty-hunit          >= 0.2      && < 10.0 ,
         tasty-quickcheck     >= 0.3      && < 0.9  ,
-        time                 >= 1.4      && < 1.5  ,
-        template-haskell     >= 2.7      && < 2.10 ,
-        text                 >= 0.11.3   && < 1.2  ,
+        time,
+        template-haskell     >= 2.7      && < 2.12 ,
+        text                 >= 0.11.3   && < 1.3  ,
         unordered-containers >= 0.2.3.0  && < 0.3  ,
-        vector               >= 0.10.0.1 && < 0.11
+        vector               >= 0.10.0.1 && < 0.12
 
   GHC-Options:
         -main-is Data.API.Test.Main
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,5 +1,26 @@
 -*-change-log-*-
 
+0.8.0.1 Adam Gundry <adam@well-typed.com> October 2017
+	* Silently truncate floating point numbers to integers
+
+0.8.0.0 Mikolaj Konarski <mikolaj@well-typed.com> August 2017
+	* Update to match the published cborg 0.1 API
+
+0.7.0.1 Adam Gundry <adam@well-typed.com> April 2017
+	* Add support for GHC 8.0 and drop 7.6
+	* Tweak generated Markdown headers
+
+0.7.0.0 Adam Gundry <adam@well-typed.com> January 2016
+	* Implement more efficient data migrations
+	* Change FieldName and TypeName to use Text instead of String
+	* Adapt to changes in binary-serialise-cbor
+
+0.6.0.1 Adam Gundry <adam@well-typed.com> October 2015
+	* Support building on GHC 7.10.2 and relax dependencies
+
+0.6 Adam Gundry <adam@well-typed.com> August 2015
+	* Add tool to generate CBOR Serialise instances, and related code
+
 0.5.2 Adam Gundry <adam@well-typed.com> December 2014
 	* Fix bug in DeepSeq tool: records not reduced to normal form
 	* Add instance for NFData Binary
diff --git a/dist/build/Data/API/Parse.hs b/dist/build/Data/API/Parse.hs
deleted file mode 100644
--- a/dist/build/Data/API/Parse.hs
+++ /dev/null
@@ -1,1802 +0,0 @@
-{-# OPTIONS_GHC -w #-}
-{-# OPTIONS -fglasgow-exts -cpp #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE TemplateHaskell            #-}
-
-
-module Data.API.Parse
-    ( parseAPI
-    , parseAPIWithChangelog
-    , api
-    , apiWithChangelog
-    ) where
-
-import           Data.API.Types
-import           Data.API.Scan
-import           Data.API.Changes
-import           Data.Char
-import           Data.String
-import qualified Data.Text                  as T
-import qualified Data.CaseInsensitive       as CI
-import qualified Data.Version               as V
-import           Distribution.Text (simpleParse)
-import           Language.Haskell.TH
-import           Language.Haskell.TH.Quote
-import           Text.Printf
-import           Text.Regex
-import qualified Data.Array as Happy_Data_Array
-import qualified GHC.Exts as Happy_GHC_Exts
-import Control.Applicative(Applicative(..))
-
--- parser produced by Happy Version 1.19.4
-
-newtype HappyAbsSyn  = HappyAbsSyn HappyAny
-#if __GLASGOW_HASKELL__ >= 607
-type HappyAny = Happy_GHC_Exts.Any
-#else
-type HappyAny = forall a . a
-#endif
-happyIn5 :: (APIWithChangelog) -> (HappyAbsSyn )
-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn5 #-}
-happyOut5 :: (HappyAbsSyn ) -> (APIWithChangelog)
-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut5 #-}
-happyIn6 :: (API) -> (HappyAbsSyn )
-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn6 #-}
-happyOut6 :: (HappyAbsSyn ) -> (API)
-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut6 #-}
-happyIn7 :: ([Thing]) -> (HappyAbsSyn )
-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn7 #-}
-happyOut7 :: (HappyAbsSyn ) -> ([Thing])
-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut7 #-}
-happyIn8 :: (Thing) -> (HappyAbsSyn )
-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn8 #-}
-happyOut8 :: (HappyAbsSyn ) -> (Thing)
-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut8 #-}
-happyIn9 :: (APINode) -> (HappyAbsSyn )
-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn9 #-}
-happyOut9 :: (HappyAbsSyn ) -> (APINode)
-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut9 #-}
-happyIn10 :: (Spec) -> (HappyAbsSyn )
-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn10 #-}
-happyOut10 :: (HappyAbsSyn ) -> (Spec)
-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut10 #-}
-happyIn11 :: (Conversion) -> (HappyAbsSyn )
-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn11 #-}
-happyOut11 :: (HappyAbsSyn ) -> (Conversion)
-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut11 #-}
-happyIn12 :: (MDComment) -> (HappyAbsSyn )
-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn12 #-}
-happyOut12 :: (HappyAbsSyn ) -> (MDComment)
-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut12 #-}
-happyIn13 :: ([MDComment]) -> (HappyAbsSyn )
-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn13 #-}
-happyOut13 :: (HappyAbsSyn ) -> ([MDComment])
-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut13 #-}
-happyIn14 :: (Prefix) -> (HappyAbsSyn )
-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn14 #-}
-happyOut14 :: (HappyAbsSyn ) -> (Prefix)
-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut14 #-}
-happyIn15 :: (SpecRecord) -> (HappyAbsSyn )
-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn15 #-}
-happyOut15 :: (HappyAbsSyn ) -> (SpecRecord)
-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut15 #-}
-happyIn16 :: (SpecUnion) -> (HappyAbsSyn )
-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn16 #-}
-happyOut16 :: (HappyAbsSyn ) -> (SpecUnion)
-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut16 #-}
-happyIn17 :: ([(FieldName, FieldType)]) -> (HappyAbsSyn )
-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn17 #-}
-happyOut17 :: (HappyAbsSyn ) -> ([(FieldName, FieldType)])
-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut17 #-}
-happyIn18 :: (FieldType) -> (HappyAbsSyn )
-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn18 #-}
-happyOut18 :: (HappyAbsSyn ) -> (FieldType)
-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut18 #-}
-happyIn19 :: (Bool) -> (HappyAbsSyn )
-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn19 #-}
-happyOut19 :: (HappyAbsSyn ) -> (Bool)
-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut19 #-}
-happyIn20 :: ([(FieldName,(APIType,MDComment))]) -> (HappyAbsSyn )
-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn20 #-}
-happyOut20 :: (HappyAbsSyn ) -> ([(FieldName,(APIType,MDComment))])
-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut20 #-}
-happyIn21 :: (SpecEnum) -> (HappyAbsSyn )
-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn21 #-}
-happyOut21 :: (HappyAbsSyn ) -> (SpecEnum)
-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut21 #-}
-happyIn22 :: ([(FieldName,MDComment)]) -> (HappyAbsSyn )
-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn22 #-}
-happyOut22 :: (HappyAbsSyn ) -> ([(FieldName,MDComment)])
-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut22 #-}
-happyIn23 :: (SpecNewtype) -> (HappyAbsSyn )
-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn23 #-}
-happyOut23 :: (HappyAbsSyn ) -> (SpecNewtype)
-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut23 #-}
-happyIn24 :: (Maybe Filter) -> (HappyAbsSyn )
-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn24 #-}
-happyOut24 :: (HappyAbsSyn ) -> (Maybe Filter)
-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut24 #-}
-happyIn25 :: (Filter) -> (HappyAbsSyn )
-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn25 #-}
-happyOut25 :: (HappyAbsSyn ) -> (Filter)
-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut25 #-}
-happyIn26 :: (RegEx) -> (HappyAbsSyn )
-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn26 #-}
-happyOut26 :: (HappyAbsSyn ) -> (RegEx)
-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut26 #-}
-happyIn27 :: (APIType) -> (HappyAbsSyn )
-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn27 #-}
-happyOut27 :: (HappyAbsSyn ) -> (APIType)
-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut27 #-}
-happyIn28 :: (Maybe DefaultValue) -> (HappyAbsSyn )
-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn28 #-}
-happyOut28 :: (HappyAbsSyn ) -> (Maybe DefaultValue)
-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut28 #-}
-happyIn29 :: (BasicType) -> (HappyAbsSyn )
-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn29 #-}
-happyOut29 :: (HappyAbsSyn ) -> (BasicType)
-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut29 #-}
-happyIn30 :: (FieldName) -> (HappyAbsSyn )
-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn30 #-}
-happyOut30 :: (HappyAbsSyn ) -> (FieldName)
-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut30 #-}
-happyIn31 :: (String) -> (HappyAbsSyn )
-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn31 #-}
-happyOut31 :: (HappyAbsSyn ) -> (String)
-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut31 #-}
-happyIn32 :: (TypeName) -> (HappyAbsSyn )
-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn32 #-}
-happyOut32 :: (HappyAbsSyn ) -> (TypeName)
-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut32 #-}
-happyIn33 :: (APIChangelog) -> (HappyAbsSyn )
-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn33 #-}
-happyOut33 :: (HappyAbsSyn ) -> (APIChangelog)
-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut33 #-}
-happyIn34 :: (V.Version) -> (HappyAbsSyn )
-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn34 #-}
-happyOut34 :: (HappyAbsSyn ) -> (V.Version)
-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut34 #-}
-happyIn35 :: (VersionExtra) -> (HappyAbsSyn )
-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn35 #-}
-happyOut35 :: (HappyAbsSyn ) -> (VersionExtra)
-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut35 #-}
-happyIn36 :: ([APIChange]) -> (HappyAbsSyn )
-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn36 #-}
-happyOut36 :: (HappyAbsSyn ) -> ([APIChange])
-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut36 #-}
-happyIn37 :: ([[APIChange]]) -> (HappyAbsSyn )
-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn37 #-}
-happyOut37 :: (HappyAbsSyn ) -> ([[APIChange]])
-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut37 #-}
-happyIn38 :: ([APIChange]) -> (HappyAbsSyn )
-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn38 #-}
-happyOut38 :: (HappyAbsSyn ) -> ([APIChange])
-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut38 #-}
-happyIn39 :: ([FieldChange]) -> (HappyAbsSyn )
-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn39 #-}
-happyOut39 :: (HappyAbsSyn ) -> ([FieldChange])
-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut39 #-}
-happyIn40 :: ([FieldChange]) -> (HappyAbsSyn )
-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn40 #-}
-happyOut40 :: (HappyAbsSyn ) -> ([FieldChange])
-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut40 #-}
-happyIn41 :: (Maybe DefaultValue) -> (HappyAbsSyn )
-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn41 #-}
-happyOut41 :: (HappyAbsSyn ) -> (Maybe DefaultValue)
-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut41 #-}
-happyIn42 :: (DefaultValue) -> (HappyAbsSyn )
-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn42 #-}
-happyOut42 :: (HappyAbsSyn ) -> (DefaultValue)
-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut42 #-}
-happyIn43 :: ([UnionChange]) -> (HappyAbsSyn )
-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn43 #-}
-happyOut43 :: (HappyAbsSyn ) -> ([UnionChange])
-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut43 #-}
-happyIn44 :: ([UnionChange]) -> (HappyAbsSyn )
-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn44 #-}
-happyOut44 :: (HappyAbsSyn ) -> ([UnionChange])
-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut44 #-}
-happyIn45 :: ([EnumChange]) -> (HappyAbsSyn )
-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn45 #-}
-happyOut45 :: (HappyAbsSyn ) -> ([EnumChange])
-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut45 #-}
-happyIn46 :: ([EnumChange]) -> (HappyAbsSyn )
-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn46 #-}
-happyOut46 :: (HappyAbsSyn ) -> ([EnumChange])
-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut46 #-}
-happyIn47 :: (MigrationTag) -> (HappyAbsSyn )
-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyIn47 #-}
-happyOut47 :: (HappyAbsSyn ) -> (MigrationTag)
-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOut47 #-}
-happyInTok :: (PToken) -> (HappyAbsSyn )
-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyInTok #-}
-happyOutTok :: (HappyAbsSyn ) -> (PToken)
-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
-{-# INLINE happyOutTok #-}
-
-
-happyActOffsets :: HappyAddr
-happyActOffsets = HappyA# "\x00\x00\x00\x00\x00\x00\xf8\x00\x0c\x01\xe5\x00\xe5\x00\x47\x00\x01\x01\x08\x01\xe7\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\x00\x00\x00\x00\xdd\x00\x00\x00\xf9\x00\x00\x00\x02\x01\x3a\x00\x00\x00\xfc\x00\x00\x00\xe2\x00\xe2\x00\xe2\x00\x6e\x00\xf2\xff\x00\x00\xf4\x00\x00\x00\x00\x00\xdc\x00\x00\x00\xdc\x00\xdc\x00\xdc\x00\xe1\x00\x00\x00\x00\x00\xff\xff\xff\xff\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\xfb\x00\xfa\x00\x60\x00\x00\x00\x00\x00\xd7\x00\x43\x00\x3c\x00\xfd\xff\xd6\x00\x00\x00\xfd\xff\x00\x00\x50\x00\x00\x00\x3c\x00\x00\x00\x66\x00\x00\x00\x1f\x00\x00\x00\x63\x00\x00\x00\x00\x00\xf7\x00\xf6\x00\x47\x00\xf5\x00\x47\x00\x47\x00\xf1\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x47\x00\xed\x00\x00\x00\x26\x00\xee\x00\xec\x00\x47\x00\x00\x00\x47\x00\x00\x00\xfa\xff\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x00\x00\x47\x00\x47\x00\x47\x00\x47\x00\x00\x00\xeb\x00\xd2\x00\x00\x00\xea\x00\xce\x00\x00\x00\xe8\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x4c\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x26\x00\x26\x00\x00\x00\xc8\x00\x47\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\xe0\x00\xdf\x00\x00\x00\x00\x00\x47\x00\x26\x00\x47\x00\x26\x00\x47\x00\x26\x00\xc7\x00\x00\x00\xc9\x00\x00\x00\x00\x00\x00\x00\xdb\x00\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\xb6\x00\x00\x00\xfe\xff\xc5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyGotoOffsets :: HappyAddr
-happyGotoOffsets = HappyA# "\xd1\x00\x78\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x28\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\xba\x00\xc0\x00\x00\x00\x00\x00\xc4\x00\xc3\x00\xc2\x00\x00\x00\xad\x00\x00\x00\x02\x00\x00\x00\x00\x00\xc1\x00\x00\x00\xbf\x00\xbe\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x46\x00\x36\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\xc6\x00\x99\x00\xbc\x00\x00\x00\x00\x00\x76\x00\x9d\x00\xa3\x00\xa1\x00\x69\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\xa8\x00\x00\x00\xa6\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\xa0\x00\xb0\x00\x9c\x00\x00\x00\x9f\x00\x98\x00\x96\x00\x94\x00\x00\x00\x92\x00\x8f\x00\x8d\x00\x00\x00\x8b\x00\x89\x00\x87\x00\x85\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x74\x00\x2f\x00\x00\x00\x35\x00\x81\x00\x00\x00\xf4\xff\x00\x00\x00\x00\x91\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x00\x70\x00\x7b\x00\x6f\x00\xee\xff\x37\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x2a\x00\x00\x00\x00\x00\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\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyDefActions :: HappyAddr
-happyDefActions = HappyA# "\xfa\xff\xfa\xff\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\xed\xff\xed\xff\x00\x00\xef\xff\xfd\xff\x00\x00\xfb\xff\xf9\xff\xf8\xff\x00\x00\xec\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc7\xff\x00\x00\xc0\xff\xba\xff\xbd\xff\xee\xff\xed\xff\xbf\xff\x00\x00\xbc\xff\xed\xff\x00\x00\xbb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\xff\xed\xff\xc1\xff\xb2\xff\x00\x00\x94\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xb8\xff\x00\x00\x00\x00\xf0\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xd1\xff\x00\x00\x00\x00\xca\xff\xcb\xff\xc9\xff\xcd\xff\xcc\xff\xd0\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xff\xb9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\xff\xb6\xff\xaf\xff\x00\x00\xaa\xff\xb5\xff\x9f\xff\x00\x00\x9b\xff\xb4\xff\x99\xff\x00\x00\x95\xff\xb7\xff\xdd\xff\xe2\xff\x00\x00\xea\xff\x00\x00\xeb\xff\x00\x00\xc8\xff\xd4\xff\x00\x00\xf7\xff\x00\x00\x00\x00\xd3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xed\xff\x00\x00\xdf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xff\x00\x00\x00\x00\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\xad\xff\x00\x00\x00\x00\x9d\xff\x00\x00\x00\x00\x97\xff\x98\xff\xde\xff\xdc\xff\x00\x00\x00\x00\xd5\xff\xed\xff\xe0\xff\x00\x00\x00\x00\x00\x00\xe8\xff\xe5\xff\x00\x00\xf1\xff\xce\xff\xe6\xff\xe9\xff\xed\xff\x00\x00\xe1\xff\xdb\xff\xd8\xff\xd9\xff\xd6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\xff\xa8\xff\x9c\xff\x9e\xff\x96\xff\x00\x00\x00\x00\xed\xff\xe3\xff\xed\xff\xcf\xff\x00\x00\xa6\xff\xa2\xff\xa5\xff\xa4\xff\xa3\xff\xa1\xff\xa7\xff\xe7\xff\xe4\xff\x00\x00\x00\x00\xae\xff\x00\x00\x00\x00\xab\xff\xa9\xff\xd7\xff\xda\xff"#
-
-happyCheck :: HappyAddr
-happyCheck = HappyA# "\xff\xff\x03\x00\x03\x00\x09\x00\x0a\x00\x13\x00\x07\x00\x19\x00\x1a\x00\x07\x00\x08\x00\x17\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x24\x00\x03\x00\x04\x00\x25\x00\x1d\x00\x07\x00\x08\x00\x09\x00\x1c\x00\x21\x00\x23\x00\x27\x00\x2a\x00\x24\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x03\x00\x07\x00\x08\x00\x0c\x00\x07\x00\x1a\x00\x07\x00\x08\x00\x07\x00\x08\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x19\x00\x1a\x00\x05\x00\x0d\x00\x1e\x00\x25\x00\x1c\x00\x0a\x00\x0b\x00\x23\x00\x0e\x00\x1c\x00\x16\x00\x10\x00\x18\x00\x12\x00\x24\x00\x24\x00\x05\x00\x16\x00\x16\x00\x18\x00\x18\x00\x0a\x00\x0b\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x10\x00\x0d\x00\x12\x00\x1f\x00\x1e\x00\x13\x00\x16\x00\x23\x00\x18\x00\x23\x00\x16\x00\x1e\x00\x18\x00\x1c\x00\x1d\x00\x1e\x00\x23\x00\x20\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x25\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x26\x00\x26\x00\x07\x00\x08\x00\x2a\x00\x2a\x00\x00\x00\x01\x00\x02\x00\x18\x00\x19\x00\x1a\x00\x18\x00\x19\x00\x1a\x00\x13\x00\x14\x00\x15\x00\x29\x00\x16\x00\x16\x00\x18\x00\x18\x00\x16\x00\x16\x00\x18\x00\x18\x00\x16\x00\x27\x00\x18\x00\x16\x00\x1b\x00\x18\x00\x2a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x07\x00\x08\x00\x19\x00\x1a\x00\x07\x00\x08\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x11\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x14\x00\x15\x00\x19\x00\x1a\x00\x07\x00\x08\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x19\x00\x1a\x00\x22\x00\x23\x00\x28\x00\x29\x00\x07\x00\x08\x00\x26\x00\x27\x00\x1f\x00\x20\x00\x23\x00\x1d\x00\x1e\x00\x01\x00\x02\x00\x01\x00\x02\x00\x18\x00\x0f\x00\x06\x00\x2a\x00\x1b\x00\x1b\x00\x1b\x00\x21\x00\x1b\x00\x1b\x00\x1b\x00\x1b\x00\x2a\x00\x26\x00\x04\x00\x09\x00\x09\x00\x1c\x00\x1f\x00\x08\x00\x08\x00\x24\x00\x22\x00\x05\x00\x20\x00\x05\x00\x20\x00\x05\x00\x05\x00\x05\x00\x20\x00\x05\x00\x04\x00\x08\x00\x05\x00\x02\x00\x02\x00\x02\x00\x24\x00\x24\x00\x02\x00\x02\x00\x0c\x00\x0b\x00\x24\x00\x20\x00\x06\x00\x01\x00\x0b\x00\x05\x00\x24\x00\x24\x00\x2b\x00\x01\x00\x23\x00\x27\x00\x0b\x00\x01\x00\xff\xff\x17\x00\x2b\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"#
-
-happyTable :: HappyAddr
-happyTable = HappyA# "\x00\x00\xb6\x00\x3e\x00\x8e\x00\x8f\x00\x2d\x00\x3f\x00\xaa\x00\x65\x00\x09\x00\x0a\x00\xb3\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x2e\x00\x0d\x00\x0e\x00\xb4\x00\x54\x00\x0f\x00\x0a\x00\x10\x00\x2a\x00\xb7\x00\x55\x00\x90\x00\xc4\x00\x4a\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\x3e\x00\x09\x00\x0a\x00\x63\x00\x3f\x00\x11\x00\x09\x00\x0a\x00\xbd\x00\x0a\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x64\x00\x65\x00\x36\x00\x9b\x00\x5c\x00\xc5\x00\x1d\x00\x37\x00\x38\x00\x5d\x00\x99\x00\x0b\x00\x96\x00\x39\x00\x3c\x00\x3a\x00\xc1\x00\x4a\x00\x4a\x00\x3b\x00\xa9\x00\x3c\x00\x3c\x00\x37\x00\x38\x00\x24\x00\x25\x00\x26\x00\x27\x00\x39\x00\x95\x00\x3a\x00\x28\x00\x58\x00\x72\x00\x3b\x00\x29\x00\x3c\x00\x59\x00\x96\x00\x5c\x00\x3c\x00\x13\x00\x14\x00\x15\x00\x5d\x00\x16\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x17\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\xa0\x00\xa2\x00\xbe\x00\x0a\x00\xa1\x00\xa3\x00\x05\x00\x03\x00\x04\x00\x75\x00\x76\x00\x77\x00\x79\x00\x7a\x00\x7b\x00\x2f\x00\x30\x00\x31\x00\x77\x00\xab\x00\xad\x00\x3c\x00\x3c\x00\xb1\x00\x9c\x00\x3c\x00\x3c\x00\x66\x00\x7b\x00\x3c\x00\x67\x00\x5d\x00\x3c\x00\x50\x00\xac\x00\x65\x00\xae\x00\x65\x00\xb2\x00\x0a\x00\x98\x00\x65\x00\x9e\x00\x0a\x00\x81\x00\x65\x00\x82\x00\x65\x00\x83\x00\x65\x00\x84\x00\x65\x00\x85\x00\x65\x00\x86\x00\x65\x00\x5f\x00\x87\x00\x65\x00\x88\x00\x65\x00\x89\x00\x65\x00\x8a\x00\x65\x00\x8b\x00\x8c\x00\x90\x00\x65\x00\x91\x00\x0a\x00\x92\x00\x65\x00\x6a\x00\x65\x00\x6d\x00\x65\x00\x6e\x00\x65\x00\x70\x00\x65\x00\x51\x00\x52\x00\x59\x00\x5a\x00\x21\x00\x0a\x00\x55\x00\x56\x00\x1e\x00\x1f\x00\x80\x00\x18\x00\x19\x00\x03\x00\x04\x00\x06\x00\x04\x00\x5e\x00\x61\x00\x68\x00\x2b\x00\x4c\x00\x4d\x00\x4e\x00\x22\x00\x4f\x00\x31\x00\x33\x00\x34\x00\xc7\x00\xc8\x00\xbd\x00\xc0\x00\xc1\x00\xc3\x00\xc4\x00\xb0\x00\xb1\x00\x2e\x00\x9b\x00\x9e\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa9\x00\x94\x00\xa8\x00\x95\x00\x6c\x00\x98\x00\x6d\x00\x70\x00\x72\x00\x74\x00\x2e\x00\x33\x00\x61\x00\x63\x00\x6a\x00\x0d\x00\x33\x00\x4c\x00\x36\x00\x2a\x00\x0d\x00\x18\x00\x33\x00\x21\x00\xbe\xff\x1d\x00\x1c\x00\x1b\x00\x0d\x00\x08\x00\x00\x00\x09\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
-
-happyReduceArr = Happy_Data_Array.array (2, 107) [
-	(2 , happyReduce_2),
-	(3 , happyReduce_3),
-	(4 , happyReduce_4),
-	(5 , happyReduce_5),
-	(6 , happyReduce_6),
-	(7 , happyReduce_7),
-	(8 , happyReduce_8),
-	(9 , happyReduce_9),
-	(10 , happyReduce_10),
-	(11 , happyReduce_11),
-	(12 , happyReduce_12),
-	(13 , happyReduce_13),
-	(14 , happyReduce_14),
-	(15 , happyReduce_15),
-	(16 , happyReduce_16),
-	(17 , happyReduce_17),
-	(18 , happyReduce_18),
-	(19 , happyReduce_19),
-	(20 , happyReduce_20),
-	(21 , happyReduce_21),
-	(22 , happyReduce_22),
-	(23 , happyReduce_23),
-	(24 , happyReduce_24),
-	(25 , happyReduce_25),
-	(26 , happyReduce_26),
-	(27 , happyReduce_27),
-	(28 , happyReduce_28),
-	(29 , happyReduce_29),
-	(30 , happyReduce_30),
-	(31 , happyReduce_31),
-	(32 , happyReduce_32),
-	(33 , happyReduce_33),
-	(34 , happyReduce_34),
-	(35 , happyReduce_35),
-	(36 , happyReduce_36),
-	(37 , happyReduce_37),
-	(38 , happyReduce_38),
-	(39 , happyReduce_39),
-	(40 , happyReduce_40),
-	(41 , happyReduce_41),
-	(42 , happyReduce_42),
-	(43 , happyReduce_43),
-	(44 , happyReduce_44),
-	(45 , happyReduce_45),
-	(46 , happyReduce_46),
-	(47 , happyReduce_47),
-	(48 , happyReduce_48),
-	(49 , happyReduce_49),
-	(50 , happyReduce_50),
-	(51 , happyReduce_51),
-	(52 , happyReduce_52),
-	(53 , happyReduce_53),
-	(54 , happyReduce_54),
-	(55 , happyReduce_55),
-	(56 , happyReduce_56),
-	(57 , happyReduce_57),
-	(58 , happyReduce_58),
-	(59 , happyReduce_59),
-	(60 , happyReduce_60),
-	(61 , happyReduce_61),
-	(62 , happyReduce_62),
-	(63 , happyReduce_63),
-	(64 , happyReduce_64),
-	(65 , happyReduce_65),
-	(66 , happyReduce_66),
-	(67 , happyReduce_67),
-	(68 , happyReduce_68),
-	(69 , happyReduce_69),
-	(70 , happyReduce_70),
-	(71 , happyReduce_71),
-	(72 , happyReduce_72),
-	(73 , happyReduce_73),
-	(74 , happyReduce_74),
-	(75 , happyReduce_75),
-	(76 , happyReduce_76),
-	(77 , happyReduce_77),
-	(78 , happyReduce_78),
-	(79 , happyReduce_79),
-	(80 , happyReduce_80),
-	(81 , happyReduce_81),
-	(82 , happyReduce_82),
-	(83 , happyReduce_83),
-	(84 , happyReduce_84),
-	(85 , happyReduce_85),
-	(86 , happyReduce_86),
-	(87 , happyReduce_87),
-	(88 , happyReduce_88),
-	(89 , happyReduce_89),
-	(90 , happyReduce_90),
-	(91 , happyReduce_91),
-	(92 , happyReduce_92),
-	(93 , happyReduce_93),
-	(94 , happyReduce_94),
-	(95 , happyReduce_95),
-	(96 , happyReduce_96),
-	(97 , happyReduce_97),
-	(98 , happyReduce_98),
-	(99 , happyReduce_99),
-	(100 , happyReduce_100),
-	(101 , happyReduce_101),
-	(102 , happyReduce_102),
-	(103 , happyReduce_103),
-	(104 , happyReduce_104),
-	(105 , happyReduce_105),
-	(106 , happyReduce_106),
-	(107 , happyReduce_107)
-	]
-
-happy_n_terms = 44 :: Int
-happy_n_nonterms = 43 :: Int
-
-happyReduce_2 = happySpecReduce_3  0# happyReduction_2
-happyReduction_2 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
-	case happyOut33 happy_x_3 of { happy_var_3 -> 
-	happyIn5
-		 ((happy_var_1, happy_var_3)
-	)}}
-
-happyReduce_3 = happySpecReduce_1  1# happyReduction_3
-happyReduction_3 happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	happyIn6
-		 (reverse happy_var_1
-	)}
-
-happyReduce_4 = happySpecReduce_3  2# happyReduction_4
-happyReduction_4 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> 
-	case happyOut8 happy_x_3 of { happy_var_3 -> 
-	happyIn7
-		 (happy_var_3 : happy_var_1
-	)}}
-
-happyReduce_5 = happySpecReduce_0  2# happyReduction_5
-happyReduction_5  =  happyIn7
-		 ([]
-	)
-
-happyReduce_6 = happySpecReduce_1  3# happyReduction_6
-happyReduction_6 happy_x_1
-	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (ThNode    happy_var_1
-	)}
-
-happyReduce_7 = happySpecReduce_1  3# happyReduction_7
-happyReduction_7 happy_x_1
-	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
-	happyIn8
-		 (ThComment happy_var_1
-	)}
-
-happyReduce_8 = happyReduce 7# 4# happyReduction_8
-happyReduction_8 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut14 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_3 of { ((,) _ (TypeIden happy_var_3)) -> 
-	case happyOut12 happy_x_4 of { happy_var_4 -> 
-	case happyOut10 happy_x_6 of { happy_var_6 -> 
-	case happyOut11 happy_x_7 of { happy_var_7 -> 
-	happyIn9
-		 (APINode (TypeName happy_var_3) happy_var_4 happy_var_1 happy_var_6 happy_var_7
-	) `HappyStk` happyRest}}}}}
-
-happyReduce_9 = happySpecReduce_1  5# happyReduction_9
-happyReduction_9 happy_x_1
-	 =  case happyOut15 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (SpRecord  happy_var_1
-	)}
-
-happyReduce_10 = happySpecReduce_1  5# happyReduction_10
-happyReduction_10 happy_x_1
-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (SpUnion   happy_var_1
-	)}
-
-happyReduce_11 = happySpecReduce_1  5# happyReduction_11
-happyReduction_11 happy_x_1
-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (SpEnum    happy_var_1
-	)}
-
-happyReduce_12 = happySpecReduce_1  5# happyReduction_12
-happyReduction_12 happy_x_1
-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (SpNewtype happy_var_1
-	)}
-
-happyReduce_13 = happySpecReduce_1  5# happyReduction_13
-happyReduction_13 happy_x_1
-	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
-	happyIn10
-		 (SpSynonym happy_var_1
-	)}
-
-happyReduce_14 = happyReduce 4# 6# happyReduction_14
-happyReduction_14 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut30 happy_x_4 of { happy_var_4 -> 
-	happyIn11
-		 (Just (happy_var_2,happy_var_4)
-	) `HappyStk` happyRest}}
-
-happyReduce_15 = happySpecReduce_0  6# happyReduction_15
-happyReduction_15  =  happyIn11
-		 (Nothing
-	)
-
-happyReduce_16 = happySpecReduce_1  7# happyReduction_16
-happyReduction_16 happy_x_1
-	 =  case happyOut13 happy_x_1 of { happy_var_1 -> 
-	happyIn12
-		 (unlines $ reverse happy_var_1
-	)}
-
-happyReduce_17 = happySpecReduce_2  8# happyReduction_17
-happyReduction_17 happy_x_2
-	happy_x_1
-	 =  case happyOut13 happy_x_1 of { happy_var_1 -> 
-	case happyOutTok happy_x_2 of { ((,) _ (Comment  happy_var_2)) -> 
-	happyIn13
-		 (happy_var_2 : happy_var_1
-	)}}
-
-happyReduce_18 = happySpecReduce_0  8# happyReduction_18
-happyReduction_18  =  happyIn13
-		 ([]
-	)
-
-happyReduce_19 = happySpecReduce_1  9# happyReduction_19
-happyReduction_19 happy_x_1
-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
-	happyIn14
-		 (CI.mk happy_var_1
-	)}
-
-happyReduce_20 = happySpecReduce_2  10# happyReduction_20
-happyReduction_20 happy_x_2
-	happy_x_1
-	 =  case happyOut17 happy_x_2 of { happy_var_2 -> 
-	happyIn15
-		 (SpecRecord $ reverse happy_var_2
-	)}
-
-happyReduce_21 = happySpecReduce_2  11# happyReduction_21
-happyReduction_21 happy_x_2
-	happy_x_1
-	 =  case happyOut20 happy_x_2 of { happy_var_2 -> 
-	happyIn16
-		 (SpecUnion  $ reverse happy_var_2
-	)}
-
-happyReduce_22 = happyReduce 4# 12# happyReduction_22
-happyReduction_22 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut17 happy_x_1 of { happy_var_1 -> 
-	case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut18 happy_x_4 of { happy_var_4 -> 
-	happyIn17
-		 ((happy_var_2,happy_var_4) : happy_var_1
-	) `HappyStk` happyRest}}}
-
-happyReduce_23 = happySpecReduce_3  12# happyReduction_23
-happyReduction_23 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_1 of { happy_var_1 -> 
-	case happyOut18 happy_x_3 of { happy_var_3 -> 
-	happyIn17
-		 ([(happy_var_1,happy_var_3)]
-	)}}
-
-happyReduce_24 = happyReduce 4# 13# happyReduction_24
-happyReduction_24 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut27 happy_x_1 of { happy_var_1 -> 
-	case happyOut19 happy_x_2 of { happy_var_2 -> 
-	case happyOut28 happy_x_3 of { happy_var_3 -> 
-	case happyOut12 happy_x_4 of { happy_var_4 -> 
-	happyIn18
-		 (FieldType happy_var_1 happy_var_2 happy_var_3 happy_var_4
-	) `HappyStk` happyRest}}}}
-
-happyReduce_25 = happySpecReduce_1  14# happyReduction_25
-happyReduction_25 happy_x_1
-	 =  happyIn19
-		 (True
-	)
-
-happyReduce_26 = happySpecReduce_0  14# happyReduction_26
-happyReduction_26  =  happyIn19
-		 (False
-	)
-
-happyReduce_27 = happyReduce 6# 15# happyReduction_27
-happyReduction_27 (happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut20 happy_x_1 of { happy_var_1 -> 
-	case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_5 of { happy_var_5 -> 
-	case happyOut12 happy_x_6 of { happy_var_6 -> 
-	happyIn20
-		 ((happy_var_3,(happy_var_5,happy_var_6)) : happy_var_1
-	) `HappyStk` happyRest}}}}
-
-happyReduce_28 = happyReduce 5# 15# happyReduction_28
-happyReduction_28 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut27 happy_x_4 of { happy_var_4 -> 
-	case happyOut12 happy_x_5 of { happy_var_5 -> 
-	happyIn20
-		 ([(happy_var_2,(happy_var_4,happy_var_5))]
-	) `HappyStk` happyRest}}}
-
-happyReduce_29 = happySpecReduce_2  16# happyReduction_29
-happyReduction_29 happy_x_2
-	happy_x_1
-	 =  case happyOut22 happy_x_2 of { happy_var_2 -> 
-	happyIn21
-		 (SpecEnum $ reverse happy_var_2
-	)}
-
-happyReduce_30 = happyReduce 4# 17# happyReduction_30
-happyReduction_30 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut22 happy_x_1 of { happy_var_1 -> 
-	case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut12 happy_x_4 of { happy_var_4 -> 
-	happyIn22
-		 ((happy_var_3,happy_var_4) : happy_var_1
-	) `HappyStk` happyRest}}}
-
-happyReduce_31 = happySpecReduce_3  17# happyReduction_31
-happyReduction_31 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
-	case happyOut12 happy_x_3 of { happy_var_3 -> 
-	happyIn22
-		 ([(happy_var_2,happy_var_3)]
-	)}}
-
-happyReduce_32 = happySpecReduce_3  18# happyReduction_32
-happyReduction_32 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
-	case happyOut24 happy_x_3 of { happy_var_3 -> 
-	happyIn23
-		 (SpecNewtype happy_var_2 happy_var_3
-	)}}
-
-happyReduce_33 = happySpecReduce_2  19# happyReduction_33
-happyReduction_33 happy_x_2
-	happy_x_1
-	 =  case happyOut25 happy_x_2 of { happy_var_2 -> 
-	happyIn24
-		 (Just happy_var_2
-	)}
-
-happyReduce_34 = happySpecReduce_0  19# happyReduction_34
-happyReduction_34  =  happyIn24
-		 (Nothing
-	)
-
-happyReduce_35 = happySpecReduce_1  20# happyReduction_35
-happyReduction_35 happy_x_1
-	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
-	happyIn25
-		 (FtrStrg happy_var_1
-	)}
-
-happyReduce_36 = happySpecReduce_2  20# happyReduction_36
-happyReduction_36 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_2 of { ((,) _ (Intg     happy_var_2)) -> 
-	happyIn25
-		 (FtrIntg $ IntRange (Just happy_var_2) Nothing
-	)}
-
-happyReduce_37 = happyReduce 5# 20# happyReduction_37
-happyReduction_37 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_2 of { ((,) _ (Intg     happy_var_2)) -> 
-	case happyOutTok happy_x_5 of { ((,) _ (Intg     happy_var_5)) -> 
-	happyIn25
-		 (FtrIntg $ IntRange (Just happy_var_2) (Just happy_var_5)
-	) `HappyStk` happyRest}}
-
-happyReduce_38 = happySpecReduce_2  20# happyReduction_38
-happyReduction_38 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_2 of { ((,) _ (Intg     happy_var_2)) -> 
-	happyIn25
-		 (FtrIntg $ IntRange Nothing   (Just happy_var_2)
-	)}
-
-happyReduce_39 = happySpecReduce_2  20# happyReduction_39
-happyReduction_39 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_2 of { ((,) _ (UTCTIME  happy_var_2)) -> 
-	happyIn25
-		 (FtrUTC  $ UTCRange (Just happy_var_2) Nothing
-	)}
-
-happyReduce_40 = happyReduce 5# 20# happyReduction_40
-happyReduction_40 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOutTok happy_x_2 of { ((,) _ (UTCTIME  happy_var_2)) -> 
-	case happyOutTok happy_x_5 of { ((,) _ (UTCTIME  happy_var_5)) -> 
-	happyIn25
-		 (FtrUTC  $ UTCRange (Just happy_var_2) (Just happy_var_5)
-	) `HappyStk` happyRest}}
-
-happyReduce_41 = happySpecReduce_2  20# happyReduction_41
-happyReduction_41 happy_x_2
-	happy_x_1
-	 =  case happyOutTok happy_x_2 of { ((,) _ (UTCTIME  happy_var_2)) -> 
-	happyIn25
-		 (FtrUTC  $ UTCRange Nothing   (Just happy_var_2)
-	)}
-
-happyReduce_42 = happySpecReduce_1  21# happyReduction_42
-happyReduction_42 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (Strg     happy_var_1)) -> 
-	happyIn26
-		 (RegEx (T.pack happy_var_1) $ mkRegexWithOpts happy_var_1 False True
-	)}
-
-happyReduce_43 = happySpecReduce_2  22# happyReduction_43
-happyReduction_43 happy_x_2
-	happy_x_1
-	 =  case happyOut27 happy_x_2 of { happy_var_2 -> 
-	happyIn27
-		 (TyMaybe            happy_var_2
-	)}
-
-happyReduce_44 = happySpecReduce_3  22# happyReduction_44
-happyReduction_44 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut27 happy_x_2 of { happy_var_2 -> 
-	happyIn27
-		 (TyList             happy_var_2
-	)}
-
-happyReduce_45 = happySpecReduce_1  22# happyReduction_45
-happyReduction_45 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (TypeIden happy_var_1)) -> 
-	happyIn27
-		 (TyName   (TypeName happy_var_1)
-	)}
-
-happyReduce_46 = happySpecReduce_1  22# happyReduction_46
-happyReduction_46 happy_x_1
-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> 
-	happyIn27
-		 (TyBasic            happy_var_1
-	)}
-
-happyReduce_47 = happySpecReduce_1  22# happyReduction_47
-happyReduction_47 happy_x_1
-	 =  happyIn27
-		 (TyJSON
-	)
-
-happyReduce_48 = happySpecReduce_1  23# happyReduction_48
-happyReduction_48 happy_x_1
-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> 
-	happyIn28
-		 (Just happy_var_1
-	)}
-
-happyReduce_49 = happySpecReduce_0  23# happyReduction_49
-happyReduction_49  =  happyIn28
-		 (Nothing
-	)
-
-happyReduce_50 = happySpecReduce_1  24# happyReduction_50
-happyReduction_50 happy_x_1
-	 =  happyIn29
-		 (BTstring
-	)
-
-happyReduce_51 = happySpecReduce_1  24# happyReduction_51
-happyReduction_51 happy_x_1
-	 =  happyIn29
-		 (BTbinary
-	)
-
-happyReduce_52 = happySpecReduce_1  24# happyReduction_52
-happyReduction_52 happy_x_1
-	 =  happyIn29
-		 (BTbool
-	)
-
-happyReduce_53 = happySpecReduce_1  24# happyReduction_53
-happyReduction_53 happy_x_1
-	 =  happyIn29
-		 (BTint
-	)
-
-happyReduce_54 = happySpecReduce_1  24# happyReduction_54
-happyReduction_54 happy_x_1
-	 =  happyIn29
-		 (BTutc
-	)
-
-happyReduce_55 = happySpecReduce_1  25# happyReduction_55
-happyReduction_55 happy_x_1
-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> 
-	happyIn30
-		 (FieldName happy_var_1
-	)}
-
-happyReduce_56 = happySpecReduce_1  26# happyReduction_56
-happyReduction_56 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (VarIden  happy_var_1)) -> 
-	happyIn31
-		 (happy_var_1
-	)}
-
-happyReduce_57 = happySpecReduce_1  26# happyReduction_57
-happyReduction_57 happy_x_1
-	 =  happyIn31
-		 ("default"
-	)
-
-happyReduce_58 = happySpecReduce_1  26# happyReduction_58
-happyReduction_58 happy_x_1
-	 =  happyIn31
-		 ("field"
-	)
-
-happyReduce_59 = happySpecReduce_1  26# happyReduction_59
-happyReduction_59 happy_x_1
-	 =  happyIn31
-		 ("alternative"
-	)
-
-happyReduce_60 = happySpecReduce_1  26# happyReduction_60
-happyReduction_60 happy_x_1
-	 =  happyIn31
-		 ("to"
-	)
-
-happyReduce_61 = happySpecReduce_1  27# happyReduction_61
-happyReduction_61 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (TypeIden happy_var_1)) -> 
-	happyIn32
-		 (TypeName happy_var_1
-	)}
-
-happyReduce_62 = happyReduce 5# 28# happyReduction_62
-happyReduction_62 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut35 happy_x_2 of { happy_var_2 -> 
-	case happyOut36 happy_x_3 of { happy_var_3 -> 
-	case happyOut33 happy_x_5 of { happy_var_5 -> 
-	happyIn33
-		 (ChangesUpTo happy_var_2 happy_var_3 happy_var_5
-	) `HappyStk` happyRest}}}
-
-happyReduce_63 = happySpecReduce_2  28# happyReduction_63
-happyReduction_63 happy_x_2
-	happy_x_1
-	 =  case happyOut34 happy_x_2 of { happy_var_2 -> 
-	happyIn33
-		 (ChangesStart happy_var_2
-	)}
-
-happyReduce_64 = happySpecReduce_3  28# happyReduction_64
-happyReduction_64 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut33 happy_x_3 of { happy_var_3 -> 
-	happyIn33
-		 (happy_var_3
-	)}
-
-happyReduce_65 = happySpecReduce_1  29# happyReduction_65
-happyReduction_65 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (Strg     happy_var_1)) -> 
-	happyIn34
-		 (parseVer happy_var_1
-	)}
-
-happyReduce_66 = happySpecReduce_1  30# happyReduction_66
-happyReduction_66 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (Strg     happy_var_1)) -> 
-	happyIn35
-		 (parseVersionExtra happy_var_1
-	)}
-
-happyReduce_67 = happySpecReduce_1  31# happyReduction_67
-happyReduction_67 happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	happyIn36
-		 (concat (reverse happy_var_1)
-	)}
-
-happyReduce_68 = happySpecReduce_2  32# happyReduction_68
-happyReduction_68 happy_x_2
-	happy_x_1
-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> 
-	case happyOut38 happy_x_2 of { happy_var_2 -> 
-	happyIn37
-		 (happy_var_2 : happy_var_1
-	)}}
-
-happyReduce_69 = happySpecReduce_0  32# happyReduction_69
-happyReduction_69  =  happyIn37
-		 ([]
-	)
-
-happyReduce_70 = happySpecReduce_3  33# happyReduction_70
-happyReduction_70 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut10 happy_x_3 of { happy_var_3 -> 
-	happyIn38
-		 ([ChAddType happy_var_2 (declNF happy_var_3)]
-	)}}
-
-happyReduce_71 = happySpecReduce_2  33# happyReduction_71
-happyReduction_71 happy_x_2
-	happy_x_1
-	 =  case happyOut32 happy_x_2 of { happy_var_2 -> 
-	happyIn38
-		 ([ChDeleteType happy_var_2]
-	)}
-
-happyReduce_72 = happyReduce 4# 33# happyReduction_72
-happyReduction_72 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_2 of { happy_var_2 -> 
-	case happyOut32 happy_x_4 of { happy_var_4 -> 
-	happyIn38
-		 ([ChRenameType happy_var_2 happy_var_4]
-	) `HappyStk` happyRest}}
-
-happyReduce_73 = happyReduce 4# 33# happyReduction_73
-happyReduction_73 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_3 of { happy_var_3 -> 
-	case happyOut39 happy_x_4 of { happy_var_4 -> 
-	happyIn38
-		 (map (fldChangeToAPIChange happy_var_3)   (reverse happy_var_4)
-	) `HappyStk` happyRest}}
-
-happyReduce_74 = happyReduce 4# 33# happyReduction_74
-happyReduction_74 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_3 of { happy_var_3 -> 
-	case happyOut43 happy_x_4 of { happy_var_4 -> 
-	happyIn38
-		 (map (unionChangeToAPIChange happy_var_3) (reverse happy_var_4)
-	) `HappyStk` happyRest}}
-
-happyReduce_75 = happyReduce 4# 33# happyReduction_75
-happyReduction_75 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_3 of { happy_var_3 -> 
-	case happyOut45 happy_x_4 of { happy_var_4 -> 
-	happyIn38
-		 (map (enumChangeToAPIChange happy_var_3)  (reverse happy_var_4)
-	) `HappyStk` happyRest}}
-
-happyReduce_76 = happyReduce 4# 33# happyReduction_76
-happyReduction_76 (happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut32 happy_x_3 of { happy_var_3 -> 
-	case happyOut47 happy_x_4 of { happy_var_4 -> 
-	happyIn38
-		 ([ChCustomType happy_var_3 happy_var_4]
-	) `HappyStk` happyRest}}
-
-happyReduce_77 = happySpecReduce_2  33# happyReduction_77
-happyReduction_77 happy_x_2
-	happy_x_1
-	 =  case happyOut47 happy_x_2 of { happy_var_2 -> 
-	happyIn38
-		 ([ChCustomAll happy_var_2]
-	)}
-
-happyReduce_78 = happySpecReduce_1  33# happyReduction_78
-happyReduction_78 happy_x_1
-	 =  happyIn38
-		 ([]
-	)
-
-happyReduce_79 = happySpecReduce_2  34# happyReduction_79
-happyReduction_79 happy_x_2
-	happy_x_1
-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> 
-	case happyOut40 happy_x_2 of { happy_var_2 -> 
-	happyIn39
-		 (happy_var_2 ++ happy_var_1
-	)}}
-
-happyReduce_80 = happySpecReduce_1  34# happyReduction_80
-happyReduction_80 happy_x_1
-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
-	happyIn39
-		 (happy_var_1
-	)}
-
-happyReduce_81 = happyReduce 6# 35# happyReduction_81
-happyReduction_81 (happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_5 of { happy_var_5 -> 
-	case happyOut41 happy_x_6 of { happy_var_6 -> 
-	happyIn40
-		 ([FldChAdd happy_var_3 happy_var_5 happy_var_6]
-	) `HappyStk` happyRest}}}
-
-happyReduce_82 = happySpecReduce_3  35# happyReduction_82
-happyReduction_82 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_3 of { happy_var_3 -> 
-	happyIn40
-		 ([FldChDelete happy_var_3]
-	)}
-
-happyReduce_83 = happyReduce 5# 35# happyReduction_83
-happyReduction_83 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut30 happy_x_5 of { happy_var_5 -> 
-	happyIn40
-		 ([FldChRename happy_var_3 happy_var_5]
-	) `HappyStk` happyRest}}
-
-happyReduce_84 = happyReduce 7# 35# happyReduction_84
-happyReduction_84 (happy_x_7 `HappyStk`
-	happy_x_6 `HappyStk`
-	happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_5 of { happy_var_5 -> 
-	case happyOut47 happy_x_7 of { happy_var_7 -> 
-	happyIn40
-		 ([FldChChange happy_var_3 happy_var_5 happy_var_7]
-	) `HappyStk` happyRest}}}
-
-happyReduce_85 = happySpecReduce_1  35# happyReduction_85
-happyReduction_85 happy_x_1
-	 =  happyIn40
-		 ([]
-	)
-
-happyReduce_86 = happySpecReduce_2  36# happyReduction_86
-happyReduction_86 happy_x_2
-	happy_x_1
-	 =  case happyOut42 happy_x_2 of { happy_var_2 -> 
-	happyIn41
-		 (Just happy_var_2
-	)}
-
-happyReduce_87 = happySpecReduce_0  36# happyReduction_87
-happyReduction_87  =  happyIn41
-		 (Nothing
-	)
-
-happyReduce_88 = happySpecReduce_2  37# happyReduction_88
-happyReduction_88 happy_x_2
-	happy_x_1
-	 =  happyIn42
-		 (DefValList
-	)
-
-happyReduce_89 = happySpecReduce_1  37# happyReduction_89
-happyReduction_89 happy_x_1
-	 =  happyIn42
-		 (DefValMaybe
-	)
-
-happyReduce_90 = happySpecReduce_1  37# happyReduction_90
-happyReduction_90 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (Strg     happy_var_1)) -> 
-	happyIn42
-		 (DefValString (T.pack happy_var_1)
-	)}
-
-happyReduce_91 = happySpecReduce_1  37# happyReduction_91
-happyReduction_91 happy_x_1
-	 =  happyIn42
-		 (DefValBool True
-	)
-
-happyReduce_92 = happySpecReduce_1  37# happyReduction_92
-happyReduction_92 happy_x_1
-	 =  happyIn42
-		 (DefValBool False
-	)
-
-happyReduce_93 = happySpecReduce_1  37# happyReduction_93
-happyReduction_93 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (Intg     happy_var_1)) -> 
-	happyIn42
-		 (DefValInt happy_var_1
-	)}
-
-happyReduce_94 = happySpecReduce_1  37# happyReduction_94
-happyReduction_94 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (UTCTIME  happy_var_1)) -> 
-	happyIn42
-		 (DefValUtc happy_var_1
-	)}
-
-happyReduce_95 = happySpecReduce_2  38# happyReduction_95
-happyReduction_95 happy_x_2
-	happy_x_1
-	 =  case happyOut43 happy_x_1 of { happy_var_1 -> 
-	case happyOut44 happy_x_2 of { happy_var_2 -> 
-	happyIn43
-		 (happy_var_2 ++ happy_var_1
-	)}}
-
-happyReduce_96 = happySpecReduce_1  38# happyReduction_96
-happyReduction_96 happy_x_1
-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
-	happyIn43
-		 (happy_var_1
-	)}
-
-happyReduce_97 = happyReduce 5# 39# happyReduction_97
-happyReduction_97 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut27 happy_x_5 of { happy_var_5 -> 
-	happyIn44
-		 ([UnChAdd happy_var_3 happy_var_5]
-	) `HappyStk` happyRest}}
-
-happyReduce_98 = happySpecReduce_3  39# happyReduction_98
-happyReduction_98 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_3 of { happy_var_3 -> 
-	happyIn44
-		 ([UnChDelete happy_var_3]
-	)}
-
-happyReduce_99 = happyReduce 5# 39# happyReduction_99
-happyReduction_99 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut30 happy_x_5 of { happy_var_5 -> 
-	happyIn44
-		 ([UnChRename happy_var_3 happy_var_5]
-	) `HappyStk` happyRest}}
-
-happyReduce_100 = happySpecReduce_1  39# happyReduction_100
-happyReduction_100 happy_x_1
-	 =  happyIn44
-		 ([]
-	)
-
-happyReduce_101 = happySpecReduce_2  40# happyReduction_101
-happyReduction_101 happy_x_2
-	happy_x_1
-	 =  case happyOut45 happy_x_1 of { happy_var_1 -> 
-	case happyOut46 happy_x_2 of { happy_var_2 -> 
-	happyIn45
-		 (happy_var_2 ++ happy_var_1
-	)}}
-
-happyReduce_102 = happySpecReduce_1  40# happyReduction_102
-happyReduction_102 happy_x_1
-	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
-	happyIn45
-		 (happy_var_1
-	)}
-
-happyReduce_103 = happySpecReduce_3  41# happyReduction_103
-happyReduction_103 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_3 of { happy_var_3 -> 
-	happyIn46
-		 ([EnChAdd happy_var_3]
-	)}
-
-happyReduce_104 = happySpecReduce_3  41# happyReduction_104
-happyReduction_104 happy_x_3
-	happy_x_2
-	happy_x_1
-	 =  case happyOut30 happy_x_3 of { happy_var_3 -> 
-	happyIn46
-		 ([EnChDelete happy_var_3]
-	)}
-
-happyReduce_105 = happyReduce 5# 41# happyReduction_105
-happyReduction_105 (happy_x_5 `HappyStk`
-	happy_x_4 `HappyStk`
-	happy_x_3 `HappyStk`
-	happy_x_2 `HappyStk`
-	happy_x_1 `HappyStk`
-	happyRest)
-	 = case happyOut30 happy_x_3 of { happy_var_3 -> 
-	case happyOut30 happy_x_5 of { happy_var_5 -> 
-	happyIn46
-		 ([EnChRename happy_var_3 happy_var_5]
-	) `HappyStk` happyRest}}
-
-happyReduce_106 = happySpecReduce_1  41# happyReduction_106
-happyReduction_106 happy_x_1
-	 =  happyIn46
-		 ([]
-	)
-
-happyReduce_107 = happySpecReduce_1  42# happyReduction_107
-happyReduction_107 happy_x_1
-	 =  case happyOutTok happy_x_1 of { ((,) _ (TypeIden happy_var_1)) -> 
-	happyIn47
-		 (happy_var_1
-	)}
-
-happyNewToken action sts stk [] =
-	happyDoAction 43# notHappyAtAll action sts stk []
-
-happyNewToken action sts stk (tk:tks) =
-	let cont i = happyDoAction i tk action sts stk tks in
-	case tk of {
-	(,) _ Semi -> cont 1#;
-	(,) _ Bar -> cont 2#;
-	(,) _ Bra -> cont 3#;
-	(,) _ Ket -> cont 4#;
-	(,) _ ColCol -> cont 5#;
-	(,) _ Equals -> cont 6#;
-	(,) _ Query -> cont 7#;
-	(,) _ Comma -> cont 8#;
-	(,) _ LtEq -> cont 9#;
-	(,) _ GtEq -> cont 10#;
-	(,) _ Version -> cont 11#;
-	(,) _ With -> cont 12#;
-	(,) _ Integer -> cont 13#;
-	(,) _ Boolean -> cont 14#;
-	(,) _ UTC -> cont 15#;
-	(,) _ String -> cont 16#;
-	(,) _ BInary -> cont 17#;
-	(,) _ Json -> cont 18#;
-	(,) _ Record -> cont 19#;
-	(,) _ Union -> cont 20#;
-	(,) _ Enum -> cont 21#;
-	(,) _ Basic -> cont 22#;
-	(,) _ Changes -> cont 23#;
-	(,) _ Added -> cont 24#;
-	(,) _ Removed -> cont 25#;
-	(,) _ Renamed -> cont 26#;
-	(,) _ Changed -> cont 27#;
-	(,) _ Default -> cont 28#;
-	(,) _ Field -> cont 29#;
-	(,) _ Alternative -> cont 30#;
-	(,) _ Migration -> cont 31#;
-	(,) _ To -> cont 32#;
-	(,) _ NOTHING -> cont 33#;
-	(,) _ Readonly -> cont 34#;
-	(,) _ (Comment  happy_dollar_dollar) -> cont 35#;
-	(,) _ (TypeIden happy_dollar_dollar) -> cont 36#;
-	(,) _ (VarIden  happy_dollar_dollar) -> cont 37#;
-	(,) _ (Intg     happy_dollar_dollar) -> cont 38#;
-	(,) _ (Strg     happy_dollar_dollar) -> cont 39#;
-	(,) _ TRUE -> cont 40#;
-	(,) _ FALSE -> cont 41#;
-	(,) _ (UTCTIME  happy_dollar_dollar) -> cont 42#;
-	_ -> happyError' (tk:tks)
-	}
-
-happyError_ 43# tk tks = happyError' tks
-happyError_ _ tk tks = happyError' (tk:tks)
-
-happyThen :: () => ParseM a -> (a -> ParseM b) -> ParseM b
-happyThen = (>>=)
-happyReturn :: () => a -> ParseM a
-happyReturn = (return)
-happyThen1 m k tks = (>>=) m (\a -> k a tks)
-happyReturn1 :: () => a -> b -> ParseM a
-happyReturn1 = \a tks -> (return) a
-happyError' :: () => [(PToken)] -> ParseM a
-happyError' = happyError
-
-parse tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut6 x))
-
-parse_with_changelog tks = happySomeParser where
-  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut5 x))
-
-happySeq = happyDontSeq
-
-
-type ParseM = Either [PToken]
-
-happyError :: [PToken] -> ParseM a
-happyError = Left
-
-parseAPI :: String -> (Int, Int) -> String -> API
-parseAPI = wrap parse
-
-wrap :: ([PToken] -> ParseM a) -> String -> (Int, Int) -> String -> a
-wrap parser fn (start_ln,_start_cn) s = case parser (scan s) of
-    Right v  -> v
-    Left tks -> error $ printf "Syntax error at %s of %s:\n        %s\n" (loc tks) fn $ show (take 5 tks)
-  where
-    loc tks = case tks of
-            []                    -> "<EOF>"
-            (AlexPn ad ln cn,_):_ -> printf "line %d, column %d (@%d)" (start_ln+ln-1) (cn-1) ad
-
-parseAPIWithChangelog :: String -> (Int, Int) -> String -> APIWithChangelog
-parseAPIWithChangelog = wrap parse_with_changelog
-
-
-data FieldChange = FldChAdd FieldName APIType (Maybe DefaultValue)
-                 | FldChDelete FieldName
-                 | FldChRename FieldName FieldName
-                 | FldChChange FieldName APIType MigrationTag
-
-fldChangeToAPIChange :: TypeName -> FieldChange -> APIChange
-fldChangeToAPIChange t (FldChAdd f ty def)  = ChAddField t f ty def
-fldChangeToAPIChange t (FldChDelete f)      = ChDeleteField t f
-fldChangeToAPIChange t (FldChRename f f')   = ChRenameField t f f'
-fldChangeToAPIChange t (FldChChange f ty m) = ChChangeField t f ty m
-
-data UnionChange = UnChAdd FieldName APIType
-                 | UnChDelete FieldName
-                 | UnChRename FieldName FieldName
-
-unionChangeToAPIChange :: TypeName -> UnionChange -> APIChange
-unionChangeToAPIChange t (UnChAdd f ty)    = ChAddUnionAlt t f ty
-unionChangeToAPIChange t (UnChDelete f)    = ChDeleteUnionAlt t f
-unionChangeToAPIChange t (UnChRename f f') = ChRenameUnionAlt t f f'
-
-data EnumChange = EnChAdd FieldName
-                | EnChDelete FieldName
-                | EnChRename FieldName FieldName
-
-enumChangeToAPIChange :: TypeName -> EnumChange -> APIChange
-enumChangeToAPIChange t (EnChAdd f)       = ChAddEnumVal t f
-enumChangeToAPIChange t (EnChDelete f)    = ChDeleteEnumVal t f
-enumChangeToAPIChange t (EnChRename f f') = ChRenameEnumVal t f f'
-
-
-parseVer :: String -> V.Version
-parseVer x = case simpleParse x of
-                 Just v -> v
-                 Nothing -> error $ "Syntax error while parsing version " ++ x
-
-parseVersionExtra :: String -> VersionExtra
-parseVersionExtra "development" = DevVersion
-parseVersionExtra s             = Release $ parseVer s
-
-
-api :: QuasiQuoter
-api =
-    QuasiQuoter
-        { quoteExp  = located [|parseAPI|]
-        , quotePat  = error "api QuasiQuoter used in patten      context"
-        , quoteType = error "api QuasiQuoter used in type        context"
-        , quoteDec  = error "api QuasiQuoter used in declaration context"
-        }
-
-apiWithChangelog :: QuasiQuoter
-apiWithChangelog =
-    QuasiQuoter
-        { quoteExp  = located [|parseAPIWithChangelog|]
-        , quotePat  = error "apiWithChangelog QuasiQuoter used in patten      context"
-        , quoteType = error "apiWithChangelog QuasiQuoter used in type        context"
-        , quoteDec  = error "apiWithChangelog QuasiQuoter used in declaration context"
-        }
-
-located :: ExpQ -> String -> ExpQ
-located e s = do
-    l <- location
-    let fn = loc_filename l
-        ls = loc_start    l
-    [|$(e) fn ls s|]
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<command-line>" #-}
-{-# LINE 10 "<command-line>" #-}
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4
-
-# 18 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-# 31 "/usr/include/stdc-predef.h" 2 3 4
-
-
-
-
-
-
-
-
-{-# LINE 10 "<command-line>" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
-
-{-# LINE 13 "templates/GenericTemplate.hs" #-}
-
-
-
-
-
--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
-#if __GLASGOW_HASKELL__ > 706
-#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)
-#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)
-#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)
-#else
-#define LT(n,m) (n Happy_GHC_Exts.<# m)
-#define GTE(n,m) (n Happy_GHC_Exts.>=# m)
-#define EQ(n,m) (n Happy_GHC_Exts.==# m)
-#endif
-{-# LINE 46 "templates/GenericTemplate.hs" #-}
-
-
-data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
-
-
-
-
-
-{-# LINE 67 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 77 "templates/GenericTemplate.hs" #-}
-
-{-# LINE 86 "templates/GenericTemplate.hs" #-}
-
-infixr 9 `HappyStk`
-data HappyStk a = HappyStk a (HappyStk a)
-
------------------------------------------------------------------------------
--- starting the parse
-
-happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
-
------------------------------------------------------------------------------
--- Accepting the parse
-
--- If the current token is 0#, it means we've just accepted a partial
--- parse (a %partial parser).  We must ignore the saved token on the top of
--- the stack in this case.
-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =
-        happyReturn1 ans
-happyAccept j tk st sts (HappyStk ans _) = 
-        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)
-
------------------------------------------------------------------------------
--- Arrays only: do the next action
-
-
-
-happyDoAction i tk st
-        = {- nothing -}
-
-
-          case action of
-                0#           -> {- nothing -}
-                                     happyFail i tk st
-                -1#          -> {- nothing -}
-                                     happyAccept i tk st
-                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
-
-                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st
-                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
-                n                 -> {- nothing -}
-
-
-                                     happyShift new_state i tk st
-                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
-   where off    = indexShortOffAddr happyActOffsets st
-         off_i  = (off Happy_GHC_Exts.+# i)
-         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))
-                  then EQ(indexShortOffAddr happyCheck off_i, i)
-                  else False
-         action
-          | check     = indexShortOffAddr happyTable off_i
-          | otherwise = indexShortOffAddr happyDefActions st
-
-
-indexShortOffAddr (HappyA# arr) off =
-        Happy_GHC_Exts.narrow16Int# i
-  where
-        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
-        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
-        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
-        off' = off Happy_GHC_Exts.*# 2#
-
-
-
-
-
-data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
-
-
-
-
------------------------------------------------------------------------------
--- HappyState data type (not arrays)
-
-{-# LINE 170 "templates/GenericTemplate.hs" #-}
-
------------------------------------------------------------------------------
--- Shifting a token
-
-happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
-     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
---     trace "shifting the error token" $
-     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
-
-happyShift new_state i tk st sts stk =
-     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)
-
--- happyReduce is specialised for the common cases.
-
-happySpecReduce_0 i fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happySpecReduce_0 nt fn j tk st@((action)) sts stk
-     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)
-
-happySpecReduce_1 i fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')
-     = let r = fn v1 in
-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
-
-happySpecReduce_2 i fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')
-     = let r = fn v1 v2 in
-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
-
-happySpecReduce_3 i fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
-     = let r = fn v1 v2 v3 in
-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
-
-happyReduce k i fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happyReduce k nt fn j tk st sts stk
-     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
-         sts1@((HappyCons (st1@(action)) (_))) ->
-                let r = fn stk in  -- it doesn't hurt to always seq here...
-                happyDoSeq r (happyGoto nt j tk st1 sts1 r)
-
-happyMonadReduce k nt fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happyMonadReduce k nt fn j tk st sts stk =
-      case happyDrop k (HappyCons (st) (sts)) of
-        sts1@((HappyCons (st1@(action)) (_))) ->
-          let drop_stk = happyDropStk k stk in
-          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))
-
-happyMonad2Reduce k nt fn 0# tk st sts stk
-     = happyFail 0# tk st sts stk
-happyMonad2Reduce k nt fn j tk st sts stk =
-      case happyDrop k (HappyCons (st) (sts)) of
-        sts1@((HappyCons (st1@(action)) (_))) ->
-         let drop_stk = happyDropStk k stk
-
-             off = indexShortOffAddr happyGotoOffsets st1
-             off_i = (off Happy_GHC_Exts.+# nt)
-             new_state = indexShortOffAddr happyTable off_i
-
-
-
-          in
-          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
-
-happyDrop 0# l = l
-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
-
-happyDropStk 0# l = l
-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
-
------------------------------------------------------------------------------
--- Moving to a new state after a reduction
-
-
-happyGoto nt j tk st = 
-   {- nothing -}
-   happyDoAction j tk new_state
-   where off = indexShortOffAddr happyGotoOffsets st
-         off_i = (off Happy_GHC_Exts.+# nt)
-         new_state = indexShortOffAddr happyTable off_i
-
-
-
-
------------------------------------------------------------------------------
--- Error recovery (0# is the error token)
-
--- parse error if we are in recovery and we fail again
-happyFail 0# tk old_st _ stk@(x `HappyStk` _) =
-     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
---      trace "failing" $ 
-        happyError_ i tk
-
-{-  We don't need state discarding for our restricted implementation of
-    "error".  In fact, it can cause some bogus parses, so I've disabled it
-    for now --SDM
-
--- discard a state
-happyFail  0# tk old_st (HappyCons ((action)) (sts)) 
-                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
---      trace ("discarding state, depth " ++ show (length stk))  $
-        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))
--}
-
--- Enter error recovery: generate an error token,
---                       save the old token and carry on.
-happyFail  i tk (action) sts stk =
---      trace "entering error recovery" $
-        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
-
--- Internal happy errors:
-
-notHappyAtAll :: a
-notHappyAtAll = error "Internal Happy error\n"
-
------------------------------------------------------------------------------
--- Hack to get the typechecker to accept our action functions
-
-
-happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
-happyTcHack x y = y
-{-# INLINE happyTcHack #-}
-
-
------------------------------------------------------------------------------
--- Seq-ing.  If the --strict flag is given, then Happy emits 
---      happySeq = happyDoSeq
--- otherwise it emits
---      happySeq = happyDontSeq
-
-happyDoSeq, happyDontSeq :: a -> b -> b
-happyDoSeq   a b = a `seq` b
-happyDontSeq a b = b
-
------------------------------------------------------------------------------
--- Don't inline any functions from the template.  GHC has a nasty habit
--- of deciding to inline happyGoto everywhere, which increases the size of
--- the generated parser quite a bit.
-
-
-{-# NOINLINE happyDoAction #-}
-{-# NOINLINE happyTable #-}
-{-# NOINLINE happyCheck #-}
-{-# NOINLINE happyActOffsets #-}
-{-# NOINLINE happyGotoOffsets #-}
-{-# NOINLINE happyDefActions #-}
-
-{-# NOINLINE happyShift #-}
-{-# NOINLINE happySpecReduce_0 #-}
-{-# NOINLINE happySpecReduce_1 #-}
-{-# NOINLINE happySpecReduce_2 #-}
-{-# NOINLINE happySpecReduce_3 #-}
-{-# NOINLINE happyReduce #-}
-{-# NOINLINE happyMonadReduce #-}
-{-# NOINLINE happyGoto #-}
-{-# NOINLINE happyFail #-}
-
--- end of Happy Template.
diff --git a/dist/build/Data/API/Scan.hs b/dist/build/Data/API/Scan.hs
deleted file mode 100644
--- a/dist/build/Data/API/Scan.hs
+++ /dev/null
@@ -1,636 +0,0 @@
-{-# LANGUAGE CPP,MagicHash #-}
-{-# LINE 1 "src/Data/API/Scan.x" #-}
-
-{-# OPTIONS_GHC -w #-}
-
-module Data.API.Scan
-    ( scan
-    , PToken
-    , AlexPosn(..)
-    , Token(..)
-    ) where
-
-import           Data.API.Types
-import           Data.API.Utils
-
-import           Data.Char
-import           Data.Time
-import           Safe
-
-#if __GLASGOW_HASKELL__ >= 603
-#include "ghcconfig.h"
-#elif defined(__GLASGOW_HASKELL__)
-#include "config.h"
-#endif
-#if __GLASGOW_HASKELL__ >= 503
-import Data.Array
-import Data.Char (ord)
-import Data.Array.Base (unsafeAt)
-#else
-import Array
-import Char (ord)
-#endif
-#if __GLASGOW_HASKELL__ >= 503
-import GHC.Exts
-#else
-import GlaExts
-#endif
-{-# LINE 1 "templates/wrappers.hs" #-}
-{-# LINE 1 "templates/wrappers.hs" #-}
-{-# LINE 1 "<command-line>" #-}
-
-
-
-
-
-
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4
-
-# 18 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-# 31 "/usr/include/stdc-predef.h" 2 3 4
-
-
-
-
-
-
-
-
-{-# LINE 6 "<command-line>" #-}
-{-# LINE 1 "templates/wrappers.hs" #-}
--- -----------------------------------------------------------------------------
--- Alex wrapper code.
---
--- This code is in the PUBLIC DOMAIN; you may copy it freely and use
--- it for any purpose whatsoever.
-
-import Data.Word (Word8)
-{-# LINE 22 "templates/wrappers.hs" #-}
-
-import qualified Data.Bits
-
--- | Encode a Haskell String to a list of Word8 values, in UTF8 format.
-utf8Encode :: Char -> [Word8]
-utf8Encode = map fromIntegral . go . ord
- where
-  go oc
-   | oc <= 0x7f       = [oc]
-
-   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)
-                        , 0x80 + oc Data.Bits..&. 0x3f
-                        ]
-
-   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)
-                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
-                        , 0x80 + oc Data.Bits..&. 0x3f
-                        ]
-   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)
-                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)
-                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)
-                        , 0x80 + oc Data.Bits..&. 0x3f
-                        ]
-
-
-
-type Byte = Word8
-
--- -----------------------------------------------------------------------------
--- The input type
-
-
-type AlexInput = (AlexPosn,     -- current position,
-                  Char,         -- previous char
-                  [Byte],       -- pending bytes on current char
-                  String)       -- current input string
-
-ignorePendingBytes :: AlexInput -> AlexInput
-ignorePendingBytes (p,c,ps,s) = (p,c,[],s)
-
-alexInputPrevChar :: AlexInput -> Char
-alexInputPrevChar (p,c,bs,s) = c
-
-alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
-alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))
-alexGetByte (p,c,[],[]) = Nothing
-alexGetByte (p,_,[],(c:s))  = let p' = alexMove p c 
-                                  (b:bs) = utf8Encode c
-                              in p' `seq`  Just (b, (p', c, bs, s))
-
-
-{-# LINE 92 "templates/wrappers.hs" #-}
-
-{-# LINE 106 "templates/wrappers.hs" #-}
-
-{-# LINE 121 "templates/wrappers.hs" #-}
-
--- -----------------------------------------------------------------------------
--- Token positions
-
--- `Posn' records the location of a token in the input text.  It has three
--- fields: the address (number of chacaters preceding the token), line number
--- and column of a token within the file. `start_pos' gives the position of the
--- start of the file and `eof_pos' a standard encoding for the end of file.
--- `move_pos' calculates the new position after traversing a given character,
--- assuming the usual eight character tab stops.
-
-
-data AlexPosn = AlexPn !Int !Int !Int
-        deriving (Eq,Show)
-
-alexStartPos :: AlexPosn
-alexStartPos = AlexPn 0 1 1
-
-alexMove :: AlexPosn -> Char -> AlexPosn
-alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)
-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1
-alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)
-
-
--- -----------------------------------------------------------------------------
--- Default monad
-
-{-# LINE 242 "templates/wrappers.hs" #-}
-
-
--- -----------------------------------------------------------------------------
--- Monad (with ByteString input)
-
-{-# LINE 333 "templates/wrappers.hs" #-}
-
-
--- -----------------------------------------------------------------------------
--- Basic wrapper
-
-{-# LINE 360 "templates/wrappers.hs" #-}
-
-
--- -----------------------------------------------------------------------------
--- Basic wrapper, ByteString version
-
-{-# LINE 378 "templates/wrappers.hs" #-}
-
-{-# LINE 392 "templates/wrappers.hs" #-}
-
-
--- -----------------------------------------------------------------------------
--- Posn wrapper
-
--- Adds text positions to the basic model.
-
-
---alexScanTokens :: String -> [token]
-alexScanTokens str = go (alexStartPos,'\n',[],str)
-  where go inp@(pos,_,_,str) =
-          case alexScan inp 0 of
-                AlexEOF -> []
-                AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)
-                AlexSkip  inp' len     -> go inp'
-                AlexToken inp' len act -> act pos (take len str) : go inp'
-
-
-
--- -----------------------------------------------------------------------------
--- Posn wrapper, ByteString version
-
-{-# LINE 424 "templates/wrappers.hs" #-}
-
-
--- -----------------------------------------------------------------------------
--- GScan wrapper
-
--- For compatibility with previous versions of Alex, and because we can.
-
-alex_base :: AlexAddr
-alex_base = AlexA# "\xf8\xff\xff\xff\xd9\xff\xff\xff\xfd\xff\xff\xff\xcb\xff\xff\xff\xd6\xff\xff\xff\x9b\xff\xff\xff\xd6\x00\x00\x00\x2a\x01\x00\x00\xe6\xff\xff\xff\x29\x01\x00\x00\xa9\x01\x00\x00\x7c\x02\x00\x00\x69\x02\x00\x00\xfc\x02\x00\x00\x7c\x03\x00\x00\xe9\xff\xff\xff\xfc\x03\x00\x00\x7c\x04\x00\x00\xfc\x04\x00\x00\xa8\xff\xff\xff\x7c\x05\x00\x00\xfc\x05\x00\x00\x7c\x06\x00\x00\xfc\x06\x00\x00\xec\xff\xff\xff\xb4\x02\x00\x00\xbe\x02\x00\x00\xcc\x07\x00\x00\xd6\x07\x00\x00\xc7\xff\xff\xff\xe0\x07\x00\x00\x00\x00\x00\x00\x8b\x07\x00\x00\x5b\x08\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x00\x00\x00\x00\x47\x08\x00\x00\x00\x00\x00\x00\xb8\x08\x00\x00\xe2\xff\xff\xff\x00\x00\x00\x00\xf9\x08\x00\x00\xf9\x09\x00\x00\xf3\xff\xff\xff\xb9\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x0a\x00\x00\x00\x00\x00\x00\x6b\x0a\x00\x00\x3b\x0b\x00\x00\x45\x0b\x00\x00\xb0\xff\xff\xff\x7f\x0b\x00\x00\x3f\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x0b\x00\x00\x86\x0c\x00\x00\x00\x00\x00\x00\xf2\x0b\x00\x00\x86\x0d\x00\x00\xe4\x0d\x00\x00\x81\x0d\x00\x00\x00\x00\x00\x00\xc2\x0c\x00\x00\xcc\x0c\x00\x00\xb5\xff\xff\xff\x00\x00\x00\x00\xc2\x0d\x00\x00\xc2\x0e\x00\x00\x82\x0e\x00\x00\x00\x00\x00\x00\x78\x0f\x00\x00\xc8\xff\xff\xff\xfe\xff\xff\xff\x78\x10\x00\x00\x38\x10\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x2e\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x0f\x00\x00\x09\x11\x00\x00\xfe\x11\x00\x00\x49\x12\x00\x00\x94\x12\x00\x00\xdf\x12\x00\x00\x2a\x13\x00\x00\x75\x13\x00\x00\xc0\x13\x00\x00\x0b\x14\x00\x00\x56\x14\x00\x00\xa1\x14\x00\x00\xec\x14\x00\x00\x37\x15\x00\x00\x82\x15\x00\x00\xcd\x15\x00\x00\x18\x16\x00\x00\x63\x16\x00\x00\xae\x16\x00\x00\xf9\x16\x00\x00\x44\x17\x00\x00\x8f\x17\x00\x00\xda\x17\x00\x00\x25\x18\x00\x00\x70\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x18\x00\x00\x00\x00\x00\x00\x06\x19\x00\x00\x51\x19\x00\x00\x9c\x19\x00\x00\xe7\x19\x00\x00\x32\x1a\x00\x00\x7d\x1a\x00\x00\xc8\x1a\x00\x00\x13\x1b\x00\x00\x5e\x1b\x00\x00\xa9\x1b\x00\x00\xf4\x1b\x00\x00\x3f\x1c\x00\x00\x8a\x1c\x00\x00\xd5\x1c\x00\x00\x20\x1d\x00\x00\x6b\x1d\x00\x00\xb6\x1d\x00\x00\x01\x1e\x00\x00\x4c\x1e\x00\x00\x97\x1e\x00\x00\xe2\x1e\x00\x00\x2d\x1f\x00\x00\x78\x1f\x00\x00\xc3\x1f\x00\x00\x0e\x20\x00\x00\x59\x20\x00\x00\xa4\x20\x00\x00\xef\x20\x00\x00\x3a\x21\x00\x00\x85\x21\x00\x00\xd0\x21\x00\x00\x1b\x22\x00\x00\x66\x22\x00\x00\xb1\x22\x00\x00\xfc\x22\x00\x00\x47\x23\x00\x00\x92\x23\x00\x00\xdd\x23\x00\x00\x28\x24\x00\x00\x73\x24\x00\x00\xbe\x24\x00\x00\x09\x25\x00\x00\x54\x25\x00\x00\x9f\x25\x00\x00\xea\x25\x00\x00\x35\x26\x00\x00\x80\x26\x00\x00\xcb\x26\x00\x00\x16\x27\x00\x00\x61\x27\x00\x00\xac\x27\x00\x00\xf7\x27\x00\x00\x42\x28\x00\x00\x8d\x28\x00\x00\xd8\x28\x00\x00\x23\x29\x00\x00\x6e\x29\x00\x00\xb9\x29\x00\x00\x04\x2a\x00\x00\x4f\x2a\x00\x00\x9a\x2a\x00\x00\xe8\x2a\x00\x00\x33\x2b\x00\x00\x7e\x2b\x00\x00\xc9\x2b\x00\x00\x14\x2c\x00\x00\x5f\x2c\x00\x00\xaa\x2c\x00\x00\xf5\x2c\x00\x00\x40\x2d\x00\x00\x8b\x2d\x00\x00\xd6\x2d\x00\x00\x21\x2e\x00\x00\x6c\x2e\x00\x00\xb7\x2e\x00\x00\x02\x2f\x00\x00\x4d\x2f\x00\x00\x98\x2f\x00\x00\xe3\x2f\x00\x00\x2e\x30\x00\x00\x79\x30\x00\x00\xc4\x30\x00\x00\x0f\x31\x00\x00\x5a\x31\x00\x00\xa5\x31\x00\x00\xf0\x31\x00\x00\x3b\x32\x00\x00\x86\x32\x00\x00\xd1\x32\x00\x00\x1c\x33\x00\x00\x67\x33\x00\x00\xb2\x33\x00\x00\xfd\x33\x00\x00\x48\x34\x00\x00\x93\x34\x00\x00\xde\x34\x00\x00\x29\x35\x00\x00\x74\x35\x00\x00\xbf\x35\x00\x00\x0a\x36\x00\x00\x55\x36\x00\x00\xa0\x36\x00\x00\xeb\x36\x00\x00\x36\x37\x00\x00\x81\x37\x00\x00\xcc\x37\x00\x00\x17\x38\x00\x00\x62\x38\x00\x00\xad\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x0d\x00\x00\xe6\x0d\x00\x00\xf0\x0d\x00\x00\xfa\x0d\x00\x00\x04\x0e\x00\x00\xb3\x38\x00\x00\x00\x00\x00\x00"#
-
-alex_table :: AlexAddr
-alex_table = AlexA# "\x00\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x51\x00\xff\xff\x5a\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\x5b\x00\x77\x00\xef\x00\x0b\x00\x35\x00\x50\x00\x1b\x00\x4a\x00\x1e\x00\x34\x00\x3b\x00\x44\x00\x0c\x00\x2c\x00\x05\x00\x78\x00\x00\x00\x5d\x00\x01\x00\x00\x00\x08\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x58\x00\x53\x00\x03\x00\x59\x00\x04\x00\x5c\x00\x33\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x55\x00\x57\x00\x56\x00\x00\x00\xb9\x00\x78\x00\xc9\x00\xa8\x00\xbf\x00\xb3\x00\xd1\x00\xac\x00\xb9\x00\xb9\x00\xc0\x00\x9a\x00\xb9\x00\xb9\x00\xb7\x00\xb4\x00\xb9\x00\xb9\x00\xb9\x00\xae\x00\xc3\x00\x82\x00\xd9\x00\xb2\x00\x95\x00\xb9\x00\xb9\x00\xb9\x00\x0f\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x22\x00\x22\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x50\x00\x50\x00\x50\x00\x50\x00\x50\x00\x00\x00\x00\x00\x00\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\xff\xff\x00\x00\x06\x00\x00\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\xe8\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2d\x00\x15\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\x17\x00\x1f\x00\x1f\x00\x1f\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\x4d\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x02\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x07\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x1a\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x37\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x2a\x00\x16\x00\x22\x00\x22\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x0a\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x3e\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x0d\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x36\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x10\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x2b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x12\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x15\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x2a\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\x2d\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\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\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\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x46\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\x09\x00\x48\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\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4c\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\x00\x4b\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\x2b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2d\x00\x15\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\x17\x00\x1f\x00\x1f\x00\x1f\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x00\x00\x00\x00\x19\x00\x00\x00\x4a\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xed\x00\xee\x00\xee\x00\xee\x00\xee\x00\xee\x00\xee\x00\xee\x00\xee\x00\xee\x00\xee\x00\xea\x00\xea\x00\xea\x00\xea\x00\xea\x00\xea\x00\xea\x00\xea\x00\xea\x00\xea\x00\x00\x00\x00\x00\x4a\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\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x3f\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x40\x00\x10\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x31\x00\x32\x00\x14\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4f\x00\x4e\x00\x0a\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x45\x00\x46\x00\x0e\x00\x39\x00\x39\x00\x39\x00\x3a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\x62\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x63\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x64\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x68\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\x69\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x6e\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x6a\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x71\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x73\x00\xb9\x00\xb9\x00\x92\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x74\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x75\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x76\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe7\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe5\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xe4\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe3\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe1\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x7e\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x7f\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x80\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe0\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xdf\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xde\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xdb\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x84\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x85\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x86\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xda\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x87\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x88\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xd8\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xd7\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x89\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xd6\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x8a\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x8c\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x8d\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x90\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xd5\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xd4\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xd3\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x91\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xd2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x94\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x96\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xba\x00\xb9\x00\x9b\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa9\x00\xaa\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x9d\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcb\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xad\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcf\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x9f\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xa0\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xce\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa1\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcd\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa7\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xca\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xc8\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xc7\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xc5\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xc2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xc1\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xbd\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xbc\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb5\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x13\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb8\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb6\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xbe\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb1\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb0\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xaf\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xc4\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xc6\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xab\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xcc\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa6\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa5\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa4\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa3\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xa2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xd0\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xbb\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x9e\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x99\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x98\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x97\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x93\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x8f\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x8e\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x8b\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x83\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x81\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xdc\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xdd\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe2\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x7d\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x7c\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x9c\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x7b\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xe6\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x72\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x70\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x6f\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x6d\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x6c\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x6b\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x67\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\x66\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x65\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x61\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x60\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xff\xff\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x5f\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x5e\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x47\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x48\x00\x0d\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x11\x00\x2f\x00\x2f\x00\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
-
-alex_check :: AlexAddr
-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2d\x00\x0a\x00\x3d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3d\x00\x79\x00\x2f\x00\x2d\x00\x6f\x00\x20\x00\x2d\x00\x22\x00\x54\x00\x3a\x00\x2a\x00\x6e\x00\x27\x00\x28\x00\x6c\x00\x5a\x00\xff\xff\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x3a\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x3a\x00\x5d\x00\xff\xff\x5f\x00\x5a\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x27\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\x0a\x00\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x27\x00\x29\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\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2d\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\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\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x2a\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x22\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x27\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\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x5c\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\x5c\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\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x0a\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#
-
-alex_deflt :: AlexAddr
-alex_deflt = AlexA# "\xff\xff\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x0b\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\x24\x00\x24\x00\xff\xff\x29\x00\x29\x00\x2e\x00\x2e\x00\x31\x00\x31\x00\xff\xff\x38\x00\x38\x00\x3b\x00\xff\xff\x3b\x00\x3b\x00\x3c\x00\x3c\x00\x41\x00\x41\x00\xff\xff\xff\xff\xff\xff\x0b\x00\x0b\x00\x0b\x00\x45\x00\x45\x00\x3b\x00\x49\x00\x49\x00\x4a\x00\xff\xff\x4a\x00\x4a\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x4f\x00\xef\x00\xef\x00\xef\x00\x4a\x00\xff\xff\xff\xff\x51\x00\x51\x00\x51\x00\xff\xff\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xef\x00\xff\xff"#
-
-alex_accept = listArray (0::Int,240) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),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),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_33),AlexAcc (alex_action_34),AlexAcc (alex_action_35),AlexAcc (alex_action_36),AlexAcc (alex_action_37),AlexAcc (alex_action_38),AlexAcc (alex_action_39),AlexAcc (alex_action_40),AlexAcc (alex_action_41),AlexAcc (alex_action_42),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_43),AlexAcc (alex_action_44),AlexAcc (alex_action_45),AlexAcc (alex_action_46),AlexAcc (alex_action_46),AlexAcc (alex_action_46),AlexAcc (alex_action_46),AlexAcc (alex_action_46),AlexAcc (alex_action_47),AlexAcc (alex_action_48)]
-{-# LINE 80 "src/Data/API/Scan.x" #-}
-
-
-type PToken = (AlexPosn,Token)
-
-data Token
-    = Semi
-    | Bar
-    | BInary
-    | Bra
-    | Ket
-    | ColCol
-    | Colon
-    | Comma
-    | Equals
-    | LtEq
-    | GtEq
-    | Boolean
-    | Integer
-    | UTC
-    | Query
-    | Record
-    | String
-    | Json
-    | Union
-    | Version
-    | With
-    | Enum
-    | Basic
-    | Changes
-    | Added
-    | Removed
-    | Renamed
-    | Changed
-    | Default
-    | Field
-    | Alternative
-    | Migration
-    | To
-    | NOTHING
-    | TRUE
-    | FALSE
-    | Readonly
-    | UTCTIME  UTCTime
-    | Comment  String
-    | TypeIden String
-    | VarIden  String
-    | Intg     Int
-    | Strg     String
-    | ERROR
-    deriving (Eq,Show)
-
-utc_ :: AlexPosn -> String -> PToken
-utc_ = mk $ \s -> maybe ERROR UTCTIME $ parseUTC_ s
-
-line_comment :: AlexPosn -> String -> PToken
-line_comment = mk $ Comment . munch_ws . tailSafe . tailSafe 
-
-block_comment :: AlexPosn -> String -> PToken
-block_comment p (_:_:str) = 
-    case reverse $ munch_ws str of
-      _:_:rc -> (p,Comment $ reverse $ munch_ws rc)
-      _      -> error "Scan.line_comment"
-block_comment _ _ = error "Scan.line_comment" 
-
-strip_qs :: (String->Token) -> AlexPosn -> String -> PToken
-strip_qs f p (_:s) = (p,f $ initNote "Scan.strip_qs" s)
-strip_qs _ _ _     = error "Scan.strip_qs"
-
-munch_ws :: String -> String
-munch_ws = dropWhile isSpace
-
-simple :: Token -> AlexPosn -> String -> PToken
-simple tk = mk $ const tk
-
-intg :: AlexPosn -> String -> PToken
-intg p s = (p,Intg $ readNote "Data.API.Scan.intg" s)
-
-string :: AlexPosn -> String -> PToken
-string = mk (Strg . f . chop)
-  where
-    f ""    = ""
-    f (c:s) = case c of
-                '\\' -> g s
-                _    -> c : f s
-
-    g ""    = ""
-    g (c:s) = c : f s
-
-chop :: String -> String
-chop ""    = ""
-chop (c:s) =
-    case reverse s of
-      ""   -> ""
-      _:rs -> reverse rs
-
-mk :: (String->Token) -> AlexPosn -> String -> PToken
-mk f p s = (p,f s)
-
-scan :: String -> [PToken]
-scan = pp . alexScanTokens
-
-pp :: [PToken] -> [PToken]
-pp [] = []
-pp (pt@(p@(AlexPn _ _ cn),_):inp) =
-    case cn of
-      1 -> (p,Semi):pt:pp inp
-      _ ->          pt:pp inp
-
-test :: IO ()
-test = 
- do s <- getContents
-    print (scan s)
-
-alex_action_3 =  simple    Semi            
-alex_action_4 =  simple    Bar             
-alex_action_5 =  simple    Bra             
-alex_action_6 =  simple    Ket             
-alex_action_7 =  simple    ColCol          
-alex_action_8 =  simple    Colon           
-alex_action_9 =  simple    Equals          
-alex_action_10 =  simple    LtEq            
-alex_action_11 =  simple    GtEq            
-alex_action_12 =  simple    Query           
-alex_action_13 =  simple    Comma           
-alex_action_14 =  simple    Version         
-alex_action_15 =  simple    With            
-alex_action_16 =  simple    Integer         
-alex_action_17 =  simple    Boolean         
-alex_action_18 =  simple    UTC             
-alex_action_19 =  simple    String          
-alex_action_20 =  simple    BInary          
-alex_action_21 =  simple    Json            
-alex_action_22 =  simple    Record          
-alex_action_23 =  simple    Union           
-alex_action_24 =  simple    Enum            
-alex_action_25 =  simple    Basic           
-alex_action_26 =  simple    Changes         
-alex_action_27 =  simple    Added           
-alex_action_28 =  simple    Removed         
-alex_action_29 =  simple    Renamed         
-alex_action_30 =  simple    Changed         
-alex_action_31 =  simple    Default         
-alex_action_32 =  simple    Field           
-alex_action_33 =  simple    Alternative     
-alex_action_34 =  simple    Migration       
-alex_action_35 =  simple    To              
-alex_action_36 =  simple    NOTHING         
-alex_action_37 =  simple    TRUE            
-alex_action_38 =  simple    FALSE           
-alex_action_39 =  simple    Readonly        
-alex_action_40 =  utc_                      
-alex_action_41 =  mk        TypeIden        
-alex_action_42 =  strip_qs  TypeIden        
-alex_action_43 =  mk        VarIden         
-alex_action_44 =  strip_qs  VarIden         
-alex_action_45 =  string                    
-alex_action_46 =  intg                      
-alex_action_47 =  line_comment              
-alex_action_48 =  block_comment             
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
-{-# LINE 1 "<command-line>" #-}
-
-
-
-
-
-
-
-# 1 "/usr/include/stdc-predef.h" 1 3 4
-
-# 17 "/usr/include/stdc-predef.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# 1 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 1 3 4
-
-# 18 "/usr/include/x86_64-linux-gnu/bits/predefs.h" 3 4
-
-
-
-
-
-
-
-
-
-
-
-
-# 31 "/usr/include/stdc-predef.h" 2 3 4
-
-
-
-
-
-
-
-
-{-# LINE 7 "<command-line>" #-}
-{-# LINE 1 "templates/GenericTemplate.hs" #-}
--- -----------------------------------------------------------------------------
--- ALEX TEMPLATE
---
--- This code is in the PUBLIC DOMAIN; you may copy it freely and use
--- it for any purpose whatsoever.
-
--- -----------------------------------------------------------------------------
--- INTERNALS and main scanner engine
-
-{-# LINE 21 "templates/GenericTemplate.hs" #-}
-
-
-
-
-
--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
-#if __GLASGOW_HASKELL__ > 706
-#define GTE(n,m) (tagToEnum# (n >=# m))
-#define EQ(n,m) (tagToEnum# (n ==# m))
-#else
-#define GTE(n,m) (n >=# m)
-#define EQ(n,m) (n ==# m)
-#endif
-{-# LINE 51 "templates/GenericTemplate.hs" #-}
-
-
-data AlexAddr = AlexA# Addr#
--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
-#if __GLASGOW_HASKELL__ < 503
-uncheckedShiftL# = shiftL#
-#endif
-
-{-# INLINE alexIndexInt16OffAddr #-}
-alexIndexInt16OffAddr (AlexA# arr) off =
-#ifdef WORDS_BIGENDIAN
-  narrow16Int# i
-  where
-        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
-        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
-        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
-        off' = off *# 2#
-#else
-  indexInt16OffAddr# arr off
-#endif
-
-
-
-
-
-{-# INLINE alexIndexInt32OffAddr #-}
-alexIndexInt32OffAddr (AlexA# arr) off = 
-#ifdef WORDS_BIGENDIAN
-  narrow32Int# i
-  where
-   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
-		     (b2 `uncheckedShiftL#` 16#) `or#`
-		     (b1 `uncheckedShiftL#` 8#) `or#` b0)
-   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
-   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
-   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
-   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
-   off' = off *# 4#
-#else
-  indexInt32OffAddr# arr off
-#endif
-
-
-
-
-
-
-#if __GLASGOW_HASKELL__ < 503
-quickIndex arr i = arr ! i
-#else
--- GHC >= 503, unsafeAt is available from Data.Array.Base.
-quickIndex = unsafeAt
-#endif
-
-
-
-
--- -----------------------------------------------------------------------------
--- Main lexing routines
-
-data AlexReturn a
-  = AlexEOF
-  | AlexError  !AlexInput
-  | AlexSkip   !AlexInput !Int
-  | AlexToken  !AlexInput !Int a
-
--- alexScan :: AlexInput -> StartCode -> AlexReturn a
-alexScan input (I# (sc))
-  = alexScanUser undefined input (I# (sc))
-
-alexScanUser user input (I# (sc))
-  = case alex_scan_tkn user input 0# input sc AlexNone of
-	(AlexNone, input') ->
-		case alexGetByte input of
-			Nothing -> 
-
-
-
-				   AlexEOF
-			Just _ ->
-
-
-
-				   AlexError input'
-
-	(AlexLastSkip input'' len, _) ->
-
-
-
-		AlexSkip input'' len
-
-	(AlexLastAcc k input''' len, _) ->
-
-
-
-		AlexToken input''' len k
-
-
--- Push the input through the DFA, remembering the most recent accepting
--- state it encountered.
-
-alex_scan_tkn user orig_input len input s last_acc =
-  input `seq` -- strict in the input
-  let 
-	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
-  in
-  new_acc `seq`
-  case alexGetByte input of
-     Nothing -> (new_acc, input)
-     Just (c, new_input) -> 
-
-
-
-      case fromIntegral c of { (I# (ord_c)) ->
-        let
-                base   = alexIndexInt32OffAddr alex_base s
-                offset = (base +# ord_c)
-                check  = alexIndexInt16OffAddr alex_check offset
-		
-                new_s = if GTE(offset,0#) && EQ(check,ord_c)
-			  then alexIndexInt16OffAddr alex_table offset
-			  else alexIndexInt16OffAddr alex_deflt s
-	in
-        case new_s of
-	    -1# -> (new_acc, input)
-		-- on an error, we want to keep the input *before* the
-		-- character that failed, not after.
-    	    _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
-                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
-			new_input new_s new_acc
-      }
-  where
-	check_accs (AlexAccNone) = last_acc
-	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len))
-	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))
-{-# LINE 198 "templates/GenericTemplate.hs" #-}
-
-data AlexLastAcc a
-  = AlexNone
-  | AlexLastAcc a !AlexInput !Int
-  | AlexLastSkip  !AlexInput !Int
-
-instance Functor AlexLastAcc where
-    fmap f AlexNone = AlexNone
-    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z
-    fmap f (AlexLastSkip x y) = AlexLastSkip x y
-
-data AlexAcc a user
-  = AlexAccNone
-  | AlexAcc a
-  | AlexAccSkip
-{-# LINE 242 "templates/GenericTemplate.hs" #-}
-
--- used by wrappers
-iUnbox (I# (i)) = i
diff --git a/main/Data/API/MigrationTool.hs b/main/Data/API/MigrationTool.hs
--- a/main/Data/API/MigrationTool.hs
+++ b/main/Data/API/MigrationTool.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE OverloadedStrings #-}
 module Data.API.MigrationTool
     ( main
     ) where
@@ -73,7 +74,7 @@
 data ChangeTag = None
     deriving (Read, Show)
 
-customMigrations :: CustomMigrations ChangeTag ChangeTag ChangeTag
+customMigrations :: CustomMigrations JS.Object JS.Value ChangeTag ChangeTag ChangeTag
 customMigrations = CustomMigrations (nope JS.Object) (const noSchemaChanges)
                                     (nope id)        (const noSchemaChanges)
                                     (nope id)
diff --git a/main/Data/API/PerfTest.hs b/main/Data/API/PerfTest.hs
new file mode 100644
--- /dev/null
+++ b/main/Data/API/PerfTest.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Data.API.PerfTest
+    ( main
+    ) where
+
+import           Data.API.API.DSL
+import qualified Data.API.API.Gen               as Gen
+import           Data.API.NormalForm
+import           Data.API.Types
+import qualified Data.API.Value                 as Value
+
+import           Control.DeepSeq
+import           Control.Exception
+import qualified Data.Aeson                     as JS
+import qualified Codec.Serialise     as CBOR
+import           Data.Binary.Serialise.CBOR.Extra
+import           System.Environment
+import           Test.QuickCheck
+
+tyDesc :: APIType
+
+{-
+type T = [UTCTime]
+tyDesc = TyList (TyBasic BTutc)
+-}
+
+type T = Gen.APISpec
+tyDesc = TyName "APISpec"
+
+newtype V = V { _V :: Value.Value }
+
+instance CBOR.Serialise V where
+  encode (V v) = Value.encode v
+  decode = V <$!> Value.decode (apiNormalForm apiAPI) tyDesc
+
+main :: IO ()
+main = do
+  args <- getArgs
+  case args of
+    ["read"        , fp] -> do x <- CBOR.readFileDeserialise fp
+                               _ <- evaluate (force (x :: T))
+                               return ()
+    ["read-aeson"  , fp] -> do x <- CBOR.readFileDeserialise fp
+                               _ <- evaluate (force (x :: JS.Value))
+                               return ()
+    ["read-generic", fp] -> do x <- CBOR.readFileDeserialise fp
+                               _ <- evaluate (force (_V x))
+                               return ()
+    ["write"        ,fp] -> do x <- generate (resize 500 arbitrary)
+                               CBOR.writeFileSerialise fp (x :: T)
+    ["write"      ,fp,i] -> do x <- generate (resize (read i) arbitrary)
+                               CBOR.writeFileSerialise fp (x :: T)
+    _ -> error "perf-test (read|read-generic|write) <file>"
diff --git a/src/Data/API/API.hs b/src/Data/API/API.hs
--- a/src/Data/API/API.hs
+++ b/src/Data/API/API.hs
@@ -6,6 +6,8 @@
 module Data.API.API
     ( apiAPI
     , extractAPI
+    , convertAPI
+    , unconvertAPI
     ) where
 
 import           Data.API.API.DSL
@@ -18,17 +20,20 @@
 import qualified Data.Text                      as T
 import           Control.Applicative
 import           Text.Regex
+import           Prelude
 
 
 -- | Take an API spec and generate a JSON description of the API
-
 extractAPI :: API -> Value
-extractAPI api = toJSON $ map convert [ an | ThNode an <- api ]
+extractAPI = toJSON . convertAPI
 
+convertAPI :: API -> D.APISpec
+convertAPI api = [ convert an | ThNode an <- api ]
+
 convert :: APINode -> D.APINode
 convert (APINode{..}) =
     D.APINode
-        { D._an_name    = T.pack $ _TypeName      anName
+        { D._an_name    = _TypeName               anName
         , D._an_comment = T.pack                  anComment
         , D._an_prefix  = T.pack $ CI.original    anPrefix
         , D._an_spec    = convert_spec            anSpec
@@ -45,10 +50,10 @@
       SpSynonym ty -> D.SP_synonym $ convert_type              ty
 
 convert_conversion :: (FieldName,FieldName) -> D.Conversion
-convert_conversion (i,p) =
+convert_conversion (inj,prj) =
     D.Conversion
-        { D._cv_injection  = T.pack $ _FieldName p
-        , D._cv_projection = T.pack $ _FieldName i
+        { D._cv_injection  = _FieldName inj
+        , D._cv_projection = _FieldName prj
         }
 
 convert_specnt :: SpecNewtype -> D.SpecNewtype
@@ -70,7 +75,7 @@
   where
     f (fn,fty) =
         D.Field
-            { D._fd_name     = T.pack $ _FieldName fn
+            { D._fd_name     = _FieldName fn
             , D._fd_type     = convert_type $ ftType fty
             , D._fd_readonly = ftReadOnly fty
             , D._fd_default  = convert_default <$> ftDefault fty
@@ -82,7 +87,7 @@
   where
     f (fn,(ty,co)) =
         D.Field
-            { D._fd_name     = T.pack $ _FieldName fn
+            { D._fd_name     = _FieldName fn
             , D._fd_type     = convert_type ty
             , D._fd_readonly = False
             , D._fd_default  = Nothing
@@ -90,7 +95,7 @@
             }
 
 convert_alts :: [(FieldName,MDComment)] -> [T.Text]
-convert_alts fns = map (T.pack . _FieldName . fst) fns
+convert_alts fns = map (_FieldName . fst) fns
 
 convert_type :: APIType -> D.APIType
 convert_type ty0 =
@@ -102,7 +107,7 @@
       TyJSON        -> D.TY_json    0
 
 convert_ref :: TypeName -> D.TypeRef
-convert_ref (TypeName tn) = D.TypeRef (T.pack tn)
+convert_ref (TypeName tn) = D.TypeRef tn
 
 convert_basic :: BasicType -> D.BasicType
 convert_basic bt =
@@ -128,10 +133,13 @@
 instance FromJSONWithErrs Thing where
     parseJSONWithErrs v = (ThNode . unconvert) <$> parseJSONWithErrs v
 
+unconvertAPI :: D.APISpec -> API
+unconvertAPI = map (ThNode . unconvert)
+
 unconvert :: D.APINode -> APINode
 unconvert (D.APINode{..}) =
     APINode
-        { anName    = TypeName $ T.unpack       _an_name
+        { anName    = TypeName                  _an_name
         , anComment = T.unpack                  _an_comment
         , anPrefix  = CI.mk $ T.unpack          _an_prefix
         , anSpec    = unconvert_spec            _an_spec
@@ -149,8 +157,8 @@
 
 unconvert_conversion :: D.Conversion -> (FieldName, FieldName)
 unconvert_conversion c =
-    ( FieldName $ T.unpack $ D._cv_injection  c
-    , FieldName $ T.unpack $ D._cv_projection c
+    ( FieldName $ D._cv_injection  c
+    , FieldName $ D._cv_projection c
     )
 
 unconvert_specnt :: D.SpecNewtype -> SpecNewtype
@@ -170,7 +178,7 @@
 unconvert_fields :: [D.Field] -> [(FieldName, FieldType)]
 unconvert_fields al = map f al
   where
-    f fld = ( FieldName $ T.unpack $ D._fd_name fld
+    f fld = ( FieldName $ D._fd_name fld
             , FieldType { ftType     = unconvert_type $ D._fd_type fld
                         , ftReadOnly = D._fd_readonly fld
                         , ftDefault  = unconvert_default <$> D._fd_default fld
@@ -181,13 +189,13 @@
 unconvert_union :: [D.Field] -> [(FieldName, (APIType, MDComment))]
 unconvert_union al = map f al
   where
-    f fld = ( FieldName $ T.unpack $ D._fd_name fld
+    f fld = ( FieldName $ D._fd_name fld
             , ( unconvert_type $ D._fd_type fld
               , T.unpack $ D._fd_comment fld
             ))
 
 unconvert_alts :: [T.Text] -> [(FieldName,MDComment)]
-unconvert_alts fns = map ((\x -> (x, "")) . FieldName . T.unpack) fns
+unconvert_alts fns = map ((\x -> (x, "")) . FieldName) fns
 
 unconvert_type :: D.APIType -> APIType
 unconvert_type ty0 =
@@ -199,7 +207,7 @@
       D.TY_json _     -> TyJSON
 
 unconvert_ref :: D.TypeRef -> TypeName
-unconvert_ref (D.TypeRef tn) = TypeName $ T.unpack tn
+unconvert_ref (D.TypeRef tn) = TypeName tn
 
 unconvert_basic :: D.BasicType -> BasicType
 unconvert_basic bt =
diff --git a/src/Data/API/API/Gen.hs b/src/Data/API/API/Gen.hs
--- a/src/Data/API/API/Gen.hs
+++ b/src/Data/API/API/Gen.hs
@@ -18,10 +18,15 @@
 $(generateAPITools apiAPI
                    [ enumTool
                    , jsonTool'
+                   , cborTool
+                   , deepSeqTool
                    , quickCheckTool
                    , lensTool
                    , safeCopyTool
                    , exampleTool
                    , samplesTool   (mkName "apiAPISamples")
-                   , jsonTestsTool (mkName "apiAPISimpleTests")
+                   , jsonTestsTool (mkName "apiAPITestsJSON")
+                   , cborTestsTool (mkName "apiAPITestsCBOR")
+                   , cborToJSONTestsTool 'apiAPI (mkName "apiAPITestsCBORToJSON")
+                   , jsonToCBORTestsTool 'apiAPI (mkName "apiAPITestsJSONToCBOR")
                    ])
diff --git a/src/Data/API/Changes.hs b/src/Data/API/Changes.hs
--- a/src/Data/API/Changes.hs
+++ b/src/Data/API/Changes.hs
@@ -1,10 +1,10 @@
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
 {-# LANGUAGE TemplateHaskell   #-}
 
 -- | This module deals with validating API changelogs and migrating
 -- JSON data between different versions of a schema.
 module Data.API.Changes
     ( migrateDataDump
+    , migrateDataDump'
 
       -- * Validating changelogs
     , validateChanges
@@ -23,6 +23,7 @@
       -- * Custom migrations
     , CustomMigrations(..)
     , mkRecordMigration
+    , mkRecordMigration'
     , mkRecordMigrationSchema
     , noDataChanges
     , noSchemaChanges
@@ -53,17 +54,20 @@
     , prettyValueErrorPosition
     ) where
 
+import           Data.API.Changes.Types
+import           Data.API.Error
 import           Data.API.JSON
 import           Data.API.NormalForm
-import           Data.API.PP
+import           Data.API.TH.Compat
 import           Data.API.Types
 import           Data.API.Utils
+import           Data.API.Value as Value
+import           Data.Binary.Serialise.CBOR.Extra
 
 import           Control.Applicative
-import           Control.Monad
+import           Control.Monad (guard, foldM, void)
 import qualified Data.Aeson as JS
-import qualified Data.ByteString.Char8 as B
-import qualified Data.ByteString.Base64 as B64
+import           Data.List
 import           Data.Map (Map)
 import qualified Data.Map as Map
 import           Data.Maybe
@@ -72,9 +76,8 @@
 import qualified Data.HashMap.Strict as HMap
 import qualified Data.Vector as V
 import qualified Data.Text as T
-import           Data.Version
 import           Data.Time
-import           Data.List
+import           Data.Version
 import           Language.Haskell.TH
 import           Safe
 
@@ -95,7 +98,7 @@
                 => (API, Version)               -- ^ Starting schema and version
                 -> (API, VersionExtra)          -- ^ Ending schema and version
                 -> APIChangelog                 -- ^ Log of changes, containing both versions
-                -> CustomMigrations db rec fld  -- ^ Custom migration functions
+                -> CustomMigrations JS.Object JS.Value db rec fld  -- ^ Custom migration functions
                 -> TypeName                     -- ^ Name of the dataset's type
                 -> DataChecks                   -- ^ How thoroughly to validate changes
                 -> JS.Value                     -- ^ Dataset to be migrated
@@ -107,60 +110,24 @@
     db' <- applyChangesToDatabase root custom' db changes  ?!? uncurry ValueError
     return (db', warnings)
 
-data MigrateFailure
-    = ValidateFailure ValidateFailure
-    | ValueError ValueError Position
-    deriving (Eq, Show)
+migrateDataDump' :: (Read db, Read rec, Read fld)
+                => (API, Version)               -- ^ Starting schema and version
+                -> (API, VersionExtra)          -- ^ Ending schema and version
+                -> APIChangelog                 -- ^ Log of changes, containing both versions
+                -> CustomMigrations Record Value db rec fld  -- ^ Custom migration functions
+                -> TypeName                     -- ^ Name of the dataset's type
+                -> DataChecks                   -- ^ How thoroughly to validate changes
+                -> Value.Value                  -- ^ Dataset to be migrated
+                -> Either MigrateFailure (Value.Value, [MigrateWarning])
+migrateDataDump' startApi endApi changelog custom root chks db = do
+    let custom' = readCustomMigrations custom
+    (changes, warnings) <- validateChanges' startApi endApi changelog custom' root chks
+                                                           ?!? ValidateFailure
+    db' <- applyChangesToDatabase' root custom' db changes  ?!? uncurry ValueError
+    return (db', warnings)
 
-type MigrateWarning = ValidateWarning
 
-------------------
--- The key types
---
 
-type APIWithChangelog = (API, APIChangelog)
-
--- | An API changelog, consisting of a list of versions with the
--- changes from one version to the next.  The versions must be in
--- descending order (according to the 'Ord' 'Version' instance).
-data APIChangelog =
-     -- | The changes from the previous version up to this version.
-     ChangesUpTo VersionExtra [APIChange] APIChangelog
-     -- | The initial version
-   | ChangesStart Version
-    deriving (Eq, Show)
-
--- | A single change within a changelog
-data APIChange
-    = ChAddType       TypeName NormTypeDecl
-    | ChDeleteType    TypeName
-    | ChRenameType    TypeName TypeName
-
-      -- Specific changes for record types
-    | ChAddField      TypeName FieldName APIType (Maybe DefaultValue)
-    | ChDeleteField   TypeName FieldName
-    | ChRenameField   TypeName FieldName FieldName
-    | ChChangeField   TypeName FieldName APIType MigrationTag
-
-      -- Changes for union types
-    | ChAddUnionAlt    TypeName FieldName APIType
-    | ChDeleteUnionAlt TypeName FieldName
-    | ChRenameUnionAlt TypeName FieldName FieldName
-
-      -- Changes for enum types
-    | ChAddEnumVal    TypeName FieldName
-    | ChDeleteEnumVal TypeName FieldName
-    | ChRenameEnumVal TypeName FieldName FieldName
-
-      -- Custom migrations
-    | ChCustomType    TypeName MigrationTag
-    | ChCustomAll     MigrationTag
-    deriving (Eq, Show)
-
--- | Within the changelog, custom migrations are represented as
--- strings, so we have less type-safety.
-type MigrationTag = String
-
 -- | Custom migrations used in the changelog must be implemented in
 -- Haskell, and supplied in this record.  There are three kinds:
 --
@@ -179,17 +146,17 @@
 -- the enumeration types generated by 'generateMigrationKinds', which
 -- correspond to the exact set of custom migration tags used in the
 -- changelog.
-data CustomMigrations db ty fld = CustomMigrations
-    { databaseMigration       :: db -> JS.Object -> Either ValueError JS.Object
+data CustomMigrations o v db ty fld = CustomMigrations
+    { databaseMigration       :: db -> o -> Either ValueError o
     , databaseMigrationSchema :: db -> NormAPI -> Either ApplyFailure (Maybe NormAPI)
-    , typeMigration           :: ty -> JS.Value -> Either ValueError JS.Value
+    , typeMigration           :: ty -> v -> Either ValueError v
     , typeMigrationSchema     :: ty -> NormTypeDecl -> Either ApplyFailure (Maybe NormTypeDecl)
-    , fieldMigration          :: fld -> JS.Value -> Either ValueError JS.Value }
+    , fieldMigration          :: fld -> v -> Either ValueError v }
 
-type CustomMigrationsTagged = CustomMigrations MigrationTag MigrationTag MigrationTag
+type CustomMigrationsTagged o v = CustomMigrations o v MigrationTag MigrationTag MigrationTag
 
 readCustomMigrations :: (Read db, Read ty, Read fld)
-                     => CustomMigrations db ty fld -> CustomMigrationsTagged
+                     => CustomMigrations o v db ty fld -> CustomMigrationsTagged o v
 readCustomMigrations (CustomMigrations db dbs r rs f) =
     CustomMigrations (db . read) (dbs . read) (r . read) (rs . read) (f . read)
 
@@ -199,6 +166,11 @@
 mkRecordMigration f (JS.Object o) = JS.Object <$> f o
 mkRecordMigration _ v             = Left $ JSONError $ expectedObject v
 
+mkRecordMigration' :: (Record -> Either ValueError Record)
+                   -> (Value  -> Either ValueError Value)
+mkRecordMigration' f (Record xs) = Record <$> f xs
+mkRecordMigration' _ v           = Left $ JSONError $ expectedObject (JS.toJSON v)
+
 -- | Lift a schema change on record types to work on arbitrary type declarations
 mkRecordMigrationSchema :: TypeName
                         -> (NormRecordType -> Either ApplyFailure (Maybe NormRecordType))
@@ -238,20 +210,6 @@
 -- Changelog utils
 --
 
--- | Represents either a released version (with a version number) or
--- the version under development, which is newer than any release
-data VersionExtra = Release Version
-                  | DevVersion
-  deriving (Eq, Ord, Show)
-
-showVersionExtra :: VersionExtra -> String
-showVersionExtra (Release v) = showVersion v
-showVersionExtra DevVersion  = "development"
-
-instance PP VersionExtra where
-  pp = showVersionExtra
-
-
 -- | The earliest version in the changelog
 changelogStartVersion :: APIChangelog -> Version
 changelogStartVersion (ChangesStart v) = v
@@ -307,28 +265,6 @@
 -- Representing update positions
 --
 
--- | Represents the positions in a declaration to apply an update
-data UpdateDeclPos
-    = UpdateHere   (Maybe UpdateDeclPos)
-    | UpdateRecord (Map FieldName (Maybe UpdateTypePos))
-    | UpdateUnion  (Map FieldName (Maybe UpdateTypePos))
-    | UpdateType   UpdateTypePos
-    deriving (Eq, Show)
-
--- | Represents the positions in a type to apply an update
-data UpdateTypePos
-    = UpdateList UpdateTypePos
-    | UpdateMaybe UpdateTypePos
-    | UpdateNamed TypeName
-    deriving (Eq, Show)
-
-data APITableChange
-      -- | The pair of an APIChange and the positions in which to apply it
-    = APIChange APIChange (Map TypeName UpdateDeclPos)
-      -- | Request to validate the dataset against the given API
-    | ValidateData NormAPI
-    deriving (Eq, Show)
-
 -- | Given a type to be modified, find the positions in which each
 -- type in the API must be updated
 findUpdatePos :: TypeName -> NormAPI -> Map TypeName UpdateDeclPos
@@ -366,70 +302,13 @@
 -- Validating API changes
 --
 
--- | Errors that may be discovered when validating a changelog
-data ValidateFailure
-        -- | the changelog must be in descending order of versions
-    = ChangelogOutOfOrder { vfLaterVersion   :: VersionExtra
-                          , vfEarlierVersion :: VersionExtra }
-        -- | forbid migrating from one version to an earlier version
-    | CannotDowngrade { vfFromVersion :: VersionExtra
-                      , vfToVersion   :: VersionExtra }
-        -- | an API uses types that are not declared
-    | ApiInvalid { vfInvalidVersion      :: VersionExtra
-                 , vfMissingDeclarations :: Set TypeName }
-        -- | changelog entry does not apply
-    | ChangelogEntryInvalid { vfSuccessfullyApplied :: [APITableChange]
-                            , vfFailedToApply       :: APIChange
-                            , vfApplyFailure        :: ApplyFailure }
-        -- | changelog is incomplete
-        --   (ie all entries apply ok but result isn't the target api)
-    | ChangelogIncomplete { vfChangelogVersion :: VersionExtra
-                          , vfTargetVersion    :: VersionExtra
-                          , vfDifferences      :: Map TypeName (MergeResult NormTypeDecl NormTypeDecl) }
-  deriving (Eq, Show)
-
-data ValidateWarning = ValidateWarning -- add warnings about bits we cannot check (opaque custom)
-  deriving Show
-
--- | Errors that may occur applying a single API change
-data ApplyFailure
-    = TypeExists           { afExistingType  :: TypeName }     -- ^ for adding or renaming type
-    | TypeDoesNotExist     { afMissingType   :: TypeName }     -- ^ for deleting or renaming a type
-    | TypeWrongKind        { afTypeName      :: TypeName
-                           , afExpectedKind  :: TypeKind }     -- ^ e.g. it's not a record type
-    | TypeInUse            { afTypeName      :: TypeName }     -- ^ cannot delete/modify types that are still used
-    | TypeMalformed        { afType          :: APIType
-                           , afMissingTypes  :: Set TypeName } -- ^ type refers to a non-existent type
-    | DeclMalformed        { afTypeName      :: TypeName
-                           , afDecl          :: NormTypeDecl
-                           , afMissingTypes  :: Set TypeName } -- ^ decl refers to a non-existent type
-    | FieldExists          { afTypeName      :: TypeName
-                           , afTypeKind      :: TypeKind
-                           , afExistingField :: FieldName }    -- ^ for adding or renaming a field
-    | FieldDoesNotExist    { afTypeName      :: TypeName
-                           , afTypeKind      :: TypeKind
-                           , afMissingField  :: FieldName }    -- ^ for deleting or renaming a field
-    | FieldBadDefaultValue { afTypeName      :: TypeName
-                           , afFieldName     :: FieldName
-                           , afFieldType     :: APIType
-                           , afBadDefault    :: DefaultValue } -- ^ for adding a field, must be a default
-                                                               --   value compatible with the type
-    | DefaultMissing       { afTypeName      :: TypeName
-                           , afFieldName     :: FieldName }    -- ^ for adding a field to a table
-    | TableChangeError     { afCustomMessage :: String }       -- ^ custom error in tableChange
-  deriving (Eq, Show)
-
-data TypeKind = TKRecord | TKUnion | TKEnum | TKNewtype | TKTypeSynonym
-  deriving (Eq, Show)
-
-
 -- | Check that a changelog adequately describes how to migrate from
 -- one version to another.
 validateChanges :: (Read db, Read rec, Read fld)
                 => (API, Version)              -- ^ Starting schema and version
                 -> (API, VersionExtra)         -- ^ Ending schema and version
                 -> APIChangelog                -- ^ Changelog to be validated
-                -> CustomMigrations db rec fld -- ^ Custom migration functions
+                -> CustomMigrations o v db rec fld -- ^ Custom migration functions
                 -> TypeName                    -- ^ Name of the dataset's type
                 -> DataChecks                  -- ^ How thoroughly to validate changes
                 -> Either ValidateFailure [ValidateWarning]
@@ -442,7 +321,7 @@
 validateChanges' :: (API, Version)         -- ^ Starting schema and version
                  -> (API, VersionExtra)    -- ^ Ending schema and version
                  -> APIChangelog           -- ^ Changelog to be validated
-                 -> CustomMigrationsTagged -- ^ Custom migration functions
+                 -> CustomMigrationsTagged o v -- ^ Custom migration functions
                  -> TypeName               -- ^ Name of the dataset's type
                  -> DataChecks             -- ^ How thoroughly to validate changes
                  -> Either ValidateFailure ([APITableChange], [ValidateWarning])
@@ -481,7 +360,7 @@
 -- a list of the changes with appropriate TableChanges interspersed.
 -- On failure, return the list of successfully applied changes, the
 -- change that failed and the reason for the failure.
-applyAPIChangesToAPI :: TypeName -> CustomMigrationsTagged -> DataChecks
+applyAPIChangesToAPI :: TypeName -> CustomMigrationsTagged o v -> DataChecks
                      -> [APIChange] -> NormAPI
                      -> Either ValidateFailure (NormAPI, [APITableChange])
 applyAPIChangesToAPI root custom chks changes api = do
@@ -494,13 +373,13 @@
     addV a cs                      = ValidateData a : cs
 
 -- | Apply the API change
-doChangeAPI :: TypeName -> CustomMigrationsTagged -> DataChecks
+doChangeAPI :: TypeName -> CustomMigrationsTagged o v -> DataChecks
             -> (NormAPI, [APITableChange]) -> APIChange
             -> Either ValidateFailure (NormAPI, [APITableChange])
 doChangeAPI root custom chks (api, changes) change = do
     (api', pos) <- applyAPIChangeToAPI root custom change api
                        ?!? ChangelogEntryInvalid changes change
-    let changes' = APIChange change pos : changes
+    let changes' = APIChange api change pos : changes
         changes'' | validateAfter chks change = ValidateData api' : changes'
                   | otherwise                 = changes'
     return (api', changes'')
@@ -510,7 +389,7 @@
 -- each change in that context, and that we end up with the API we expect
 -- and (2) getting the intermediate APIs during data migration, because we need
 -- the schema of the intermediate data as part of applying the migration.
-applyAPIChangeToAPI :: TypeName -> CustomMigrationsTagged -> APIChange -> NormAPI
+applyAPIChangeToAPI :: TypeName -> CustomMigrationsTagged o v -> APIChange -> NormAPI
                     -> Either ApplyFailure (NormAPI, Map TypeName UpdateDeclPos)
 
 applyAPIChangeToAPI _ _ (ChAddType tname tdecl) api = do
@@ -635,9 +514,6 @@
          , Map.singleton root (UpdateHere Nothing))
 
 
-lookupType :: TypeName -> NormAPI -> Either ApplyFailure NormTypeDecl
-lookupType tname api = Map.lookup tname api ?! TypeDoesNotExist tname
-
 expectRecordType :: NormTypeDecl -> Maybe (Map FieldName APIType)
 expectRecordType (NRecordType rinfo) = Just rinfo
 expectRecordType _                   = Nothing
@@ -660,16 +536,16 @@
 -- We assume the changes have already been validated, and that the data
 -- matches the API.
 --
-applyChangesToDatabase :: TypeName -> CustomMigrationsTagged
+applyChangesToDatabase :: TypeName -> CustomMigrationsTagged JS.Object JS.Value
                        -> JS.Value -> [APITableChange]
                        -> Either (ValueError, Position) JS.Value
 applyChangesToDatabase root custom = foldM (applyChangeToDatabase root custom)
   -- just apply each of the individual changes in sequence to the whole dataset
 
-applyChangeToDatabase :: TypeName -> CustomMigrationsTagged
+applyChangeToDatabase :: TypeName -> CustomMigrationsTagged JS.Object JS.Value
                       -> JS.Value -> APITableChange
                       -> Either (ValueError, Position) JS.Value
-applyChangeToDatabase root custom v (APIChange c upds) =
+applyChangeToDatabase root custom v (APIChange _ c upds) =
     updateTypeAt upds (applyChangeToData c custom) (UpdateNamed root) v []
 applyChangeToDatabase root _      v (ValidateData api) = do
     dataMatchesNormAPI root api v
@@ -703,38 +579,36 @@
 
 -- | This actually applies the change to the data value, assuming it
 -- is already in the correct place
-applyChangeToData :: APIChange -> CustomMigrationsTagged
+applyChangeToData :: APIChange -> CustomMigrationsTagged JS.Object JS.Value
                   -> JS.Value -> Position -> Either (ValueError, Position) JS.Value
 
 applyChangeToData (ChAddField tname fname ftype mb_defval) _ =
   case mb_defval <|> defaultValueForType ftype of
     Just defval -> let newFieldValue = defaultValueAsJsValue defval
-                   in withObject (\ v _ -> pure $ HMap.insert (fieldKey fname) newFieldValue v)
+                   in withObject (\ v _ -> pure $ HMap.insert (_FieldName fname) newFieldValue v)
     Nothing     -> \ _ p -> Left (InvalidAPI (DefaultMissing tname fname), p)
 
 applyChangeToData (ChDeleteField _ fname) _ =
-    withObject (\ v _ -> pure $ HMap.delete (fieldKey fname) v)
+    withObject (\ v _ -> pure $ HMap.delete (_FieldName fname) v)
 
 applyChangeToData (ChRenameField _ fname fname') _ =
-    withObject $ \rec p -> case HMap.lookup k_fname rec of
-                           Just field -> renameField field rec
-                           Nothing    -> Left (JSONError MissingField, InField k_fname : p)
+    withObject $ \rec p -> case HMap.lookup (_FieldName fname) rec of
+                           Just field -> rename field rec
+                           Nothing    -> Left (JSONError MissingField, inField fname : p)
   where
-    k_fname       = fieldKey fname
-    k_fname'      = fieldKey fname'
-    renameField x = pure . HMap.insert k_fname' x . HMap.delete k_fname
+    rename x = pure . HMap.insert (_FieldName fname') x . HMap.delete (_FieldName fname)
 
 applyChangeToData (ChChangeField _ fname _ftype tag) custom =
-    withObjectField (fieldKey fname) (liftMigration $ fieldMigration custom tag)
+    withObjectField (_FieldName fname) (liftMigration $ fieldMigration custom tag)
 
 applyChangeToData (ChRenameUnionAlt _ fname fname') _ = withObject $ \un p ->
     case HMap.toList un of
-        [(k, r)] | k == fieldKey fname -> return $ HMap.singleton (fieldKey fname') r
-                 | otherwise           -> return un
+        [(k, r)] | k == _FieldName fname -> return $ HMap.singleton (_FieldName fname') r
+                 | otherwise             -> return un
         _ -> Left (JSONError $ SyntaxError "Not singleton", p)
 
 applyChangeToData (ChRenameEnumVal _ fname fname') _ = withString $ \s _ ->
-    if s == fieldKey fname then return (fieldKey fname')
+    if s == _FieldName fname then return (_FieldName fname')
                            else return s
 
 applyChangeToData (ChCustomType _ tag)   custom = liftMigration $ typeMigration custom tag
@@ -753,17 +627,119 @@
                  -> (a -> Position -> Either (ValueError, Position) b)
 liftMigration f v p = f v ?!? flip (,) p
 
+
+---------------------------------------------------------------------
+-- Performing data transformation (new generic value representation)
+--
+
+applyChangesToDatabase' :: TypeName -> CustomMigrationsTagged Record Value
+                        -> Value.Value -> [APITableChange]
+                        -> Either (ValueError, Position) Value.Value
+applyChangesToDatabase' root custom = foldM (applyChangeToDatabase' root custom)
+  -- just apply each of the individual changes in sequence to the whole dataset
+
+applyChangeToDatabase' :: TypeName -> CustomMigrationsTagged Record Value
+                       -> Value.Value -> APITableChange
+                       -> Either (ValueError, Position) Value.Value
+applyChangeToDatabase' root custom v (APIChange api c upds) =
+    updateTypeAt' upds (applyChangeToData' api c custom) (UpdateNamed root) v []
+applyChangeToDatabase' root _      v (ValidateData api) = do
+    matchesNormAPI api (TyName root) v []
+    return v
+
+
+-- | Apply an update at the given position in a declaration's value
+updateDeclAt' :: Map TypeName UpdateDeclPos
+              -> (Value.Value -> Position -> Either (ValueError, Position) Value.Value)
+              -> UpdateDeclPos
+              -> Value.Value -> Position -> Either (ValueError, Position) Value.Value
+updateDeclAt' _    alter (UpdateHere Nothing)    v p = alter v p
+updateDeclAt' upds alter (UpdateHere (Just upd)) v p = flip alter p =<< updateDeclAt' upds alter upd v p
+updateDeclAt' upds alter (UpdateRecord upd_flds) v p = do
+    xs <- expectRecord v p
+    Record <$!> mapM update xs
+  where
+    update x@(Field fn v') = case Map.lookup fn upd_flds of
+        Just Nothing    -> pure x
+        Just (Just utp) -> Field fn <$!> updateTypeAt' upds alter utp v' (inField fn : p)
+        Nothing         -> Left (JSONError UnexpectedField, inField fn : p)
+updateDeclAt' upds alter (UpdateUnion upd_alts)  v p = do
+    (fn, v') <- expectUnion v p
+    case Map.lookup fn upd_alts of
+        Just Nothing    -> pure v
+        Just (Just utp) -> Union fn <$!> updateTypeAt' upds alter utp v' (inField fn : p)
+        Nothing         -> Left (JSONError UnexpectedField, inField fn : p)
+updateDeclAt' upds alter (UpdateType upd)        v p = updateTypeAt' upds alter upd v p
+
+-- | Apply an update at the given position in a type's value
+updateTypeAt' :: Map TypeName UpdateDeclPos
+             -> (Value.Value -> Position -> Either (ValueError, Position) Value.Value)
+             -> UpdateTypePos
+             -> Value.Value -> Position -> Either (ValueError, Position) Value.Value
+updateTypeAt' upds alter (UpdateList upd)    v p = do
+    xs <- expectList v p
+    List <$!> mapM (\ (i, v') -> updateTypeAt' upds alter upd v' (InElem i : p)) (zip [0..] xs)
+updateTypeAt' upds alter (UpdateMaybe upd)   v p = do
+    mb <- expectMaybe v p
+    case mb of
+      Nothing -> pure v
+      Just v' -> Maybe . Just <$!> updateTypeAt' upds alter upd v' p
+updateTypeAt' upds alter (UpdateNamed tname) v p = case Map.lookup tname upds of
+    Just upd -> updateDeclAt' upds alter upd v p
+    Nothing  -> pure v
+
+
+-- | This actually applies the change to the data value, assuming it
+-- is already in the correct place
+applyChangeToData' :: NormAPI -> APIChange -> CustomMigrationsTagged Record Value
+                  -> Value.Value -> Position -> Either (ValueError, Position) Value.Value
+
+applyChangeToData' api (ChAddField tname fname ftype mb_defval) _ v p =
+  case mb_defval <|> defaultValueForType ftype of
+    Just defval -> case fromDefaultValue api ftype defval of
+                     Just v' -> Record . insertField fname v' <$!> expectRecord v p
+                     Nothing -> Left (InvalidAPI (FieldBadDefaultValue tname fname ftype defval), p)
+    Nothing -> Left (InvalidAPI (DefaultMissing tname fname), p)
+
+applyChangeToData' _ (ChDeleteField _ fname) _ v p =
+    Record . deleteField fname <$!> expectRecord v p
+
+applyChangeToData' _ (ChRenameField _ fname fname') _ v p =
+    Record . renameField fname fname' <$!> expectRecord v p
+
+applyChangeToData' _ (ChChangeField _ fname _ftype tag) custom v p = do
+    xs <- expectRecord v p
+    case findField fname xs of
+        Just (ys, v', zs)  -> do v'' <- liftMigration (fieldMigration custom tag) v' (inField fname:p)
+                                 pure (Record (joinRecords ys fname v'' zs))
+        Nothing            -> Left (JSONError MissingField, inField fname : p)
+
+applyChangeToData' _ (ChRenameUnionAlt _ fname fname') _ v p = do
+    (fn, v') <- expectUnion v p
+    pure $! if fn == fname then Union fname' v' else v
+
+applyChangeToData' _ (ChRenameEnumVal _ fname fname') _ v p = do
+    fn <- expectEnum v p
+    pure $! if fn == fname then Enum fname' else v
+
+applyChangeToData' _ (ChCustomType _ tag)   custom v p = liftMigration (typeMigration custom tag) v p
+applyChangeToData' _ (ChCustomAll tag)      custom v p = do
+    xs <- expectRecord v p
+    Record <$!> liftMigration (databaseMigration custom tag) xs p
+
+applyChangeToData' _ (ChAddType _ _)        _ v _ = pure v
+applyChangeToData' _ (ChDeleteType _)       _ v _ = pure v
+applyChangeToData' _ (ChRenameType _ _)     _ v _ = pure v
+applyChangeToData' _ (ChAddUnionAlt _ _ _)  _ v _ = pure v
+applyChangeToData' _ (ChDeleteUnionAlt _ _) _ v _ = pure v
+applyChangeToData' _ (ChAddEnumVal _ _)     _ v _ = pure v
+applyChangeToData' _ (ChDeleteEnumVal _ _)  _ v _ = pure v
+
+
 -------------------------------------
 -- Utils for manipulating JS.Values
 --
 
--- | Errors that can be discovered when migrating data values
-data ValueError
-    = JSONError JSONError                  -- ^ Data doesn't match schema
-    | CustomMigrationError String JS.Value -- ^ Error generated during custom migration
-    | InvalidAPI ApplyFailure              -- ^ An API change was invalid
-    deriving (Eq, Show)
-
 withObject :: (JS.Object -> Position -> Either (ValueError, Position) JS.Object)
            -> JS.Value -> Position -> Either (ValueError, Position) JS.Value
 withObject alter (JS.Object obj) p = JS.Object <$> alter obj p
@@ -783,7 +759,7 @@
                          -> (a -> JS.Value -> Position -> Either (ValueError, Position) JS.Value)
                          -> JS.Value -> Position -> Either (ValueError, Position) JS.Value
 withObjectMatchingFields m f (JS.Object obj) p = do
-    zs <- matchMaps (Map.mapKeys fieldKey m) (hmapToMap obj) ?!? toErr
+    zs <- matchMaps (Map.mapKeys _FieldName m) (hmapToMap obj) ?!? toErr
     obj' <- Map.traverseWithKey (\ k (ty, val) -> (f ty val (InField k : p))) zs
     return $ JS.Object $ mapToHMap obj'
   where
@@ -801,7 +777,7 @@
                          -> JS.Value -> Position -> Either (ValueError, Position) JS.Value
 withObjectMatchingUnion m f (JS.Object obj) p
   | [(k, r)] <- HMap.toList obj
-  = do x  <- Map.lookup (fromFieldKey k) m ?! (JSONError UnexpectedField, InField k : p)
+  = do x  <- Map.lookup (FieldName k) m ?! (JSONError UnexpectedField, InField k : p)
        r' <- f x r (InField k : p)
        return $ JS.Object $ HMap.singleton k r'
 withObjectMatchingUnion _ _ _ p = Left (JSONError $ SyntaxError "Not singleton", p)
@@ -823,38 +799,9 @@
 withString alter (JS.String s) p = JS.String <$> alter s p
 withString _     v             p = Left (JSONError $ expectedString v, p)
 
-fieldKey :: FieldName -> T.Text
-fieldKey (FieldName fname) = T.pack fname
 
-fromFieldKey :: T.Text -> FieldName
-fromFieldKey = FieldName . T.unpack
-
 compatibleDefaultValue :: NormAPI -> APIType -> DefaultValue -> Bool
-compatibleDefaultValue _   (TyList  _) DefValList  = True
-compatibleDefaultValue _   (TyMaybe _) DefValMaybe = True
-compatibleDefaultValue api (TyMaybe ty)    defval  = compatibleDefaultValue api ty defval
-compatibleDefaultValue _   (TyBasic bt)    defval  =
-    compatibleBasicDefaultValue bt defval
-compatibleDefaultValue _   TyJSON          _       = True
-compatibleDefaultValue env (TyName tname)  defval  =
-    case Map.lookup tname env of
-      Just (NTypeSynonym t) -> compatibleDefaultValue env t defval
-      Just (NNewtype    bt) -> compatibleBasicDefaultValue bt defval
-      Just (NEnumType vals) -> case defval of
-                                 DefValString s -> fromFieldKey s `Set.member` vals
-                                 _              -> False
-      _                     -> False
-compatibleDefaultValue _ _ _ = False
-
-compatibleBasicDefaultValue :: BasicType -> DefaultValue -> Bool
-compatibleBasicDefaultValue BTstring (DefValString _) = True
-compatibleBasicDefaultValue BTbinary (DefValString v) = case B64.decode (B.pack (T.unpack v)) of
-                                                           Left _  -> False
-                                                           Right _ -> True
-compatibleBasicDefaultValue BTbool   (DefValBool _)   = True
-compatibleBasicDefaultValue BTint    (DefValInt _)    = True
-compatibleBasicDefaultValue BTutc    (DefValUtc _)    = True
-compatibleBasicDefaultValue _         _                = False
+compatibleDefaultValue api ty dv = isJust (fromDefaultValue api ty dv)
 
 -- | Check if there is a "default" default value for a field of the
 -- given type: list and maybe have @[]@ and @nothing@ respectively.
@@ -883,7 +830,7 @@
     declMatches (NRecordType flds) = withObjectMatchingFields flds valueMatches
     declMatches (NUnionType alts)  = withObjectMatchingUnion  alts valueMatches
     declMatches (NEnumType vals)   = withString $ \ s p ->
-        if fromFieldKey s `Set.member` vals
+        if FieldName s `Set.member` vals
            then return s
            else Left (JSONError UnexpectedField, InField s : p)
     declMatches (NTypeSynonym t)   = valueMatches t
@@ -913,182 +860,8 @@
 
 type Decode t = JS.Value -> Either [(JSONError, Position)] t
 
--------------------------------------
--- Utils for merging and diffing maps
---
 
-data MergeResult a b = OnlyInLeft a | InBoth a b | OnlyInRight b
-  deriving (Eq, Show)
-
-mergeMaps :: Ord k => Map k a -> Map k b -> Map k (MergeResult a b)
-mergeMaps m1 m2 = Map.unionWith (\(OnlyInLeft a) (OnlyInRight b) -> InBoth a b)
-                      (fmap OnlyInLeft m1) (fmap OnlyInRight m2)
-
-diffMaps :: (Eq a, Ord k) => Map k a -> Map k a -> Map k (MergeResult a a)
-diffMaps m1 m2 = Map.filter different $ mergeMaps m1 m2
-  where
-    different (InBoth a b) = a /= b
-    different _            = True
-
--- Attempts to match the keys of the maps to produce a map from keys
--- to pairs.
-matchMaps :: Ord k => Map k a -> Map k b -> Either (k, Either a b) (Map k (a, b))
-matchMaps m1 m2 = Map.traverseWithKey win $ mergeMaps m1 m2
-  where
-    win _ (InBoth x y)    = return (x, y)
-    win k (OnlyInLeft x)  = Left (k, Left x)
-    win k (OnlyInRight x) = Left (k, Right x)
-
-
 -------------------------------------
--- Pretty-printing
---
-
-prettyMigrateFailure :: MigrateFailure -> String
-prettyMigrateFailure = unlines . ppLines
-
-prettyValidateFailure :: ValidateFailure -> String
-prettyValidateFailure = unlines . ppLines
-
-prettyValueError :: ValueError -> String
-prettyValueError = unlines . ppLines
-
-prettyValueErrorPosition :: (ValueError, Position) -> String
-prettyValueErrorPosition = unlines . ppLines
-
-
-instance PP TypeKind where
-  pp TKRecord      = "record"
-  pp TKUnion       = "union"
-  pp TKEnum        = "enum"
-  pp TKNewtype     = "newtype"
-  pp TKTypeSynonym = "type"
-
-ppATypeKind :: TypeKind -> String
-ppATypeKind TKRecord      = "a record"
-ppATypeKind TKUnion       = "a union"
-ppATypeKind TKEnum        = "an enum"
-ppATypeKind TKNewtype     = "a newtype"
-ppATypeKind TKTypeSynonym = "a type synonym"
-
-ppMemberWord :: TypeKind -> String
-ppMemberWord TKRecord      = "field"
-ppMemberWord TKUnion       = "alternative"
-ppMemberWord TKEnum        = "value"
-ppMemberWord TKNewtype     = "member"
-ppMemberWord TKTypeSynonym = "member"
-
-
-instance PPLines APIChange where
-  ppLines (ChAddType t d)           = ("added " ++ pp t ++ " ") `inFrontOf` ppLines d
-  ppLines (ChDeleteType t)          = ["removed " ++ pp t]
-  ppLines (ChRenameType t t')       = ["renamed " ++ pp t ++ " to " ++ pp t']
-  ppLines (ChAddField t f ty mb_v)  = [ "changed record " ++ pp t
-                                      , "  field added " ++ pp f ++ " :: " ++ pp ty
-                                        ++ maybe "" (\ v -> " default " ++ pp v) mb_v]
-  ppLines (ChDeleteField t f)       = ["changed record " ++ pp t, "  field removed " ++ pp f]
-  ppLines (ChRenameField t f f')    = [ "changed record " ++ pp t
-                                      , "  field renamed " ++ pp f ++ " to " ++ pp f']
-  ppLines (ChChangeField t f ty c)  = [ "changed record " ++ pp t
-                                      , "  field changed " ++ pp f ++ " :: " ++ pp ty
-                                        ++ " migration " ++ pp c]
-  ppLines (ChAddUnionAlt t f ty)    = [ "changed union " ++ pp t
-                                      , "  alternative added " ++ pp f ++ " :: " ++ pp ty]
-  ppLines (ChDeleteUnionAlt t f)    = [ "changed union " ++ pp t
-                                      , "  alternative removed " ++ pp f]
-  ppLines (ChRenameUnionAlt t f f') = [ "changed union " ++ pp t
-                                      , "  alternative renamed " ++ pp f ++ " to " ++ pp f']
-  ppLines (ChAddEnumVal t f)        = [ "changed enum " ++ pp t
-                                      , "  alternative added " ++ pp f]
-  ppLines (ChDeleteEnumVal t f)     = [ "changed enum " ++ pp t
-                                      , "  alternative removed " ++ pp f]
-  ppLines (ChRenameEnumVal t f f')  = [ "changed enum " ++ pp t
-                                      , "  alternative renamed " ++ pp f ++ " to " ++ pp f']
-  ppLines (ChCustomType t c)        = ["migration record " ++ pp t ++ " " ++ pp c]
-  ppLines (ChCustomAll c)           = ["migration " ++ pp c]
-
-instance PPLines MigrateFailure where
-  ppLines (ValidateFailure x) = ppLines x
-  ppLines (ValueError x ps)   = ppLines x ++ map prettyStep ps
-
-instance PPLines ValidateFailure where
-  ppLines (ChangelogOutOfOrder later earlier) =
-      ["Changelog out of order: version " ++ pp later
-           ++ " appears after version " ++ pp earlier]
-  ppLines (CannotDowngrade from to) =
-      ["Cannot downgrade from version " ++ pp from
-           ++ " to version " ++ pp to]
-  ppLines (ApiInvalid ver missing) =
-      ["Missing declarations in API version " ++ pp ver ++ ": " ++ pp missing]
-  ppLines (ChangelogEntryInvalid succs change af) =
-      ppLines af ++ ("when applying the change" : indent (ppLines change))
-          ++ if not (null succs)
-             then "after successfully applying the changes:"
-                  : indent (ppLines succs)
-             else []
-  ppLines (ChangelogIncomplete ver ver' diffs) =
-      ("Changelog incomplete! Differences between log version ("
-           ++ showVersionExtra ver ++ ") and latest version (" ++ showVersionExtra ver' ++ "):")
-      : indent (concatMap (uncurry ppDiff) $ Map.toList diffs)
-
-instance PPLines APITableChange where
-  ppLines (APIChange c _)  = ppLines c
-  ppLines (ValidateData _) = []
-
-ppDiff :: TypeName -> MergeResult NormTypeDecl NormTypeDecl -> [String]
-ppDiff t (OnlyInLeft _)  = ["removed " ++ pp t]
-ppDiff t (OnlyInRight d) = ("added " ++ pp t ++ " ") `inFrontOf` ppLines d
-ppDiff t (InBoth (NRecordType flds) (NRecordType flds')) =
-    ("changed record " ++ pp t)
-    : (concatMap (uncurry (ppDiffFields "field")) $ Map.toList $ diffMaps flds flds')
-ppDiff t (InBoth (NUnionType alts) (NUnionType alts')) =
-    ("changed union " ++ pp t)
-    : (concatMap (uncurry (ppDiffFields "alternative")) $ Map.toList $ diffMaps alts alts')
-ppDiff t (InBoth (NEnumType vals) (NEnumType vals')) =
-    ("changed enum " ++ pp t)
-    :  (map (\ x -> "  alternative removed " ++ pp x) $ Set.toList $ vals  Set.\\ vals')
-    ++ (map (\ x -> "  alternative added " ++ pp x)   $ Set.toList $ vals' Set.\\ vals)
-ppDiff t (InBoth _ _) = ["incompatible definitions of " ++ pp t]
-
-ppDiffFields :: String -> FieldName -> MergeResult APIType APIType -> [String]
-ppDiffFields s f (OnlyInLeft _)   = ["  " ++ s ++ " removed " ++ pp f]
-ppDiffFields s f (OnlyInRight ty) = ["  " ++ s ++ " added " ++ pp f ++ " :: " ++ pp ty]
-ppDiffFields s f (InBoth ty ty')   = [ "  incompatible types for " ++ s ++ " " ++ pp f
-                                     , "    changelog type:      " ++ pp ty
-                                     , "    latest version type: " ++ pp ty' ]
-
-
-instance PPLines ApplyFailure where
-  ppLines (TypeExists t)                  = ["Type " ++ pp t ++ " already exists"]
-  ppLines (TypeDoesNotExist t)            = ["Type " ++ pp t ++ " does not exist"]
-  ppLines (TypeWrongKind t k)             = ["Type " ++ pp t ++ " is not " ++ ppATypeKind k]
-  ppLines (TypeInUse t)                   = ["Type " ++ pp t ++ " is in use, so it cannot be modified"]
-  ppLines (TypeMalformed ty xs)           = ["Type " ++ pp ty
-                                             ++ " is malformed, missing declarations:"
-                                            , "  " ++ pp xs]
-  ppLines (DeclMalformed t _ xs)          = [ "Declaration of " ++ pp t
-                                              ++ " is malformed, missing declarations:"
-                                            , "  " ++ pp xs]
-  ppLines (FieldExists t k f)             = ["Type " ++ pp t ++ " already has the "
-                                             ++ ppMemberWord k ++ " " ++ pp f]
-  ppLines (FieldDoesNotExist t k f)       = ["Type " ++ pp t ++ " does not have the "
-                                             ++ ppMemberWord k ++ " " ++ pp f]
-  ppLines (FieldBadDefaultValue _ _ ty v) = ["Default value " ++ pp v
-                                             ++ " is not compatible with the type " ++ pp ty]
-  ppLines (DefaultMissing t f)            = ["Field " ++ pp f ++ " does not have a default value, but "
-                                             ++ pp t ++ " occurs in the database"]
-  ppLines (TableChangeError s)            = ["Error when detecting changed tables:", "  " ++ s]
-
-
-instance PPLines ValueError where
-  ppLines (JSONError e)              = [prettyJSONError e]
-  ppLines (CustomMigrationError e v) = [ "Custom migration error:", "  " ++ e
-                                       , "when migrating value"] ++ indent (ppLines v)
-  ppLines (InvalidAPI af)            = "Invalid API detected during value migration:"
-                                       : indent (ppLines af)
-
-
--------------------------------------
 -- Template Haskell
 --
 
@@ -1100,9 +873,9 @@
     guardNoDups (all_tags `Set.intersection` fld_tags)
     guardNoDups (rec_tags `Set.intersection` fld_tags)
 
-    return [ DataD [] (mkName all_nm) [] (cons all_nm all_tags) derivs
-           , DataD [] (mkName rec_nm) [] (cons rec_nm rec_tags) derivs
-           , DataD [] (mkName fld_nm) [] (cons fld_nm fld_tags) derivs ]
+    return [ mkDataD [] (mkName all_nm) [] (cons all_nm all_tags) derivs
+           , mkDataD [] (mkName rec_nm) [] (cons rec_nm rec_tags) derivs
+           , mkDataD [] (mkName fld_nm) [] (cons fld_nm fld_tags) derivs ]
   where
     (all_tags, rec_tags, fld_tags) = changelogTags changes
 
diff --git a/src/Data/API/Changes/Types.hs b/src/Data/API/Changes/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/API/Changes/Types.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DefaultSignatures          #-}
+{-# LANGUAGE DeriveFunctor              #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Data.API.Changes.Types
+    ( -- * Changelog representation
+      APIWithChangelog
+    , APIChangelog(..)
+    , APIChange(..)
+    , MigrationTag
+    , VersionExtra(..)
+    , showVersionExtra
+
+    , UpdateTypePos(..)
+    , UpdateDeclPos(..)
+    , APITableChange(..)
+    ) where
+
+import           Data.API.PP
+import           Data.API.NormalForm
+import           Data.API.Types
+
+import           Data.Map ( Map )
+import           Data.Version
+
+
+------------------
+-- The key types
+--
+
+type APIWithChangelog = (API, APIChangelog)
+
+-- | An API changelog, consisting of a list of versions with the
+-- changes from one version to the next.  The versions must be in
+-- descending order (according to the 'Ord' 'Version' instance).
+data APIChangelog =
+     -- | The changes from the previous version up to this version.
+     ChangesUpTo VersionExtra [APIChange] APIChangelog
+     -- | The initial version
+   | ChangesStart Version
+    deriving (Eq, Show)
+
+-- | A single change within a changelog
+data APIChange
+    = ChAddType       TypeName NormTypeDecl
+    | ChDeleteType    TypeName
+    | ChRenameType    TypeName TypeName
+
+      -- Specific changes for record types
+    | ChAddField      TypeName FieldName APIType (Maybe DefaultValue)
+    | ChDeleteField   TypeName FieldName
+    | ChRenameField   TypeName FieldName FieldName
+    | ChChangeField   TypeName FieldName APIType MigrationTag
+
+      -- Changes for union types
+    | ChAddUnionAlt    TypeName FieldName APIType
+    | ChDeleteUnionAlt TypeName FieldName
+    | ChRenameUnionAlt TypeName FieldName FieldName
+
+      -- Changes for enum types
+    | ChAddEnumVal    TypeName FieldName
+    | ChDeleteEnumVal TypeName FieldName
+    | ChRenameEnumVal TypeName FieldName FieldName
+
+      -- Custom migrations
+    | ChCustomType    TypeName MigrationTag
+    | ChCustomAll     MigrationTag
+    deriving (Eq, Show)
+
+instance PPLines APIChange where
+  ppLines (ChAddType t d)           = ("added " ++ pp t ++ " ") `inFrontOf` ppLines d
+  ppLines (ChDeleteType t)          = ["removed " ++ pp t]
+  ppLines (ChRenameType t t')       = ["renamed " ++ pp t ++ " to " ++ pp t']
+  ppLines (ChAddField t f ty mb_v)  = [ "changed record " ++ pp t
+                                      , "  field added " ++ pp f ++ " :: " ++ pp ty
+                                        ++ maybe "" (\ v -> " default " ++ pp v) mb_v]
+  ppLines (ChDeleteField t f)       = ["changed record " ++ pp t, "  field removed " ++ pp f]
+  ppLines (ChRenameField t f f')    = [ "changed record " ++ pp t
+                                      , "  field renamed " ++ pp f ++ " to " ++ pp f']
+  ppLines (ChChangeField t f ty c)  = [ "changed record " ++ pp t
+                                      , "  field changed " ++ pp f ++ " :: " ++ pp ty
+                                        ++ " migration " ++ pp c]
+  ppLines (ChAddUnionAlt t f ty)    = [ "changed union " ++ pp t
+                                      , "  alternative added " ++ pp f ++ " :: " ++ pp ty]
+  ppLines (ChDeleteUnionAlt t f)    = [ "changed union " ++ pp t
+                                      , "  alternative removed " ++ pp f]
+  ppLines (ChRenameUnionAlt t f f') = [ "changed union " ++ pp t
+                                      , "  alternative renamed " ++ pp f ++ " to " ++ pp f']
+  ppLines (ChAddEnumVal t f)        = [ "changed enum " ++ pp t
+                                      , "  alternative added " ++ pp f]
+  ppLines (ChDeleteEnumVal t f)     = [ "changed enum " ++ pp t
+                                      , "  alternative removed " ++ pp f]
+  ppLines (ChRenameEnumVal t f f')  = [ "changed enum " ++ pp t
+                                      , "  alternative renamed " ++ pp f ++ " to " ++ pp f']
+  ppLines (ChCustomType t c)        = ["migration record " ++ pp t ++ " " ++ pp c]
+  ppLines (ChCustomAll c)           = ["migration " ++ pp c]
+
+-- | Within the changelog, custom migrations are represented as
+-- strings, so we have less type-safety.
+type MigrationTag = String
+
+-- | Represents either a released version (with a version number) or
+-- the version under development, which is newer than any release
+data VersionExtra = Release Version
+                  | DevVersion
+  deriving (Eq, Ord, Show)
+
+showVersionExtra :: VersionExtra -> String
+showVersionExtra (Release v) = showVersion v
+showVersionExtra DevVersion  = "development"
+
+instance PP VersionExtra where
+  pp = showVersionExtra
+
+
+------------------------
+-- Representing updates
+--
+
+-- | Represents the positions in a declaration to apply an update
+data UpdateDeclPos
+    = UpdateHere   (Maybe UpdateDeclPos)
+    | UpdateRecord (Map FieldName (Maybe UpdateTypePos))
+    | UpdateUnion  (Map FieldName (Maybe UpdateTypePos))
+    | UpdateType   UpdateTypePos
+    deriving (Eq, Show)
+
+-- | Represents the positions in a type to apply an update
+data UpdateTypePos
+    = UpdateList UpdateTypePos
+    | UpdateMaybe UpdateTypePos
+    | UpdateNamed TypeName
+    deriving (Eq, Show)
+
+data APITableChange
+      -- | An initial API, an APIChange and the positions in which to apply it
+    = APIChange NormAPI APIChange (Map TypeName UpdateDeclPos)
+      -- | Request to validate the dataset against the given API
+    | ValidateData NormAPI
+    deriving (Eq, Show)
+
+instance PPLines APITableChange where
+  ppLines (APIChange _ c _)  = ppLines c
+  ppLines (ValidateData _) = []
diff --git a/src/Data/API/Doc/Types.hs b/src/Data/API/Doc/Types.hs
--- a/src/Data/API/Doc/Types.hs
+++ b/src/Data/API/Doc/Types.hs
@@ -21,6 +21,7 @@
 import           Data.API.PP
 import           Data.API.Types
 
+import qualified Data.Text                      as T
 import           Text.Printf
 
 type URL        = String
@@ -103,7 +104,7 @@
 renderAPIType :: DocInfo -> APIType -> String
 renderAPIType di (TyList  ty  ) = "[" ++ renderAPIType di ty ++ "]"
 renderAPIType di (TyMaybe ty  ) = "?" ++ renderAPIType di ty
-renderAPIType di (TyName  tn  ) = mk_link (doc_info_type_url di tn) (_TypeName tn)
+renderAPIType di (TyName  tn  ) = mk_link (doc_info_type_url di tn) (T.unpack (_TypeName tn))
 renderAPIType _  (TyBasic bt  ) = pp bt
 renderAPIType _  TyJSON         = "json"
 
diff --git a/src/Data/API/Error.hs b/src/Data/API/Error.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/API/Error.hs
@@ -0,0 +1,372 @@
+{-# LANGUAGE DefaultSignatures          #-}
+{-# LANGUAGE DeriveFunctor              #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Data.API.Error
+    ( -- * Representation of JSON parsing errors
+      JSONError(..)
+    , JSONWarning
+    , Expected(..)
+    , FormatExpected(..)
+    , Position
+    , Step(..)
+    , inField
+    , prettyJSONErrorPositions
+    , prettyJSONError
+    , prettyStep
+
+      -- * JSON parse error construction
+    , expectedArray
+    , expectedBool
+    , expectedInt
+    , expectedObject
+    , expectedString
+    , badFormat
+
+      -- * Validation and migration errors
+    , ValueError(..)
+    , ValidateFailure(..)
+    , ValidateWarning
+    , ApplyFailure(..)
+    , TypeKind(..)
+    , MigrateFailure(..)
+    , MigrateWarning
+    , prettyMigrateFailure
+    , prettyValidateFailure
+    , prettyValueError
+    , prettyValueErrorPosition
+    ) where
+
+import           Data.API.Changes.Types
+import           Data.API.PP
+import           Data.API.NormalForm
+import           Data.API.Types
+import           Data.API.Utils
+
+import qualified Data.Aeson                     as JS
+import           Data.Aeson.TH
+import qualified Data.Graph                     as Graph
+import           Data.List
+import           Data.Map ( Map )
+import qualified Data.Map                       as Map
+import qualified Data.SafeCopy                  as SC
+import           Data.Set ( Set )
+import qualified Data.Set                       as Set
+import qualified Data.Text                      as T
+import           Data.Time
+
+
+----------------------------------------------------------
+-- Representation of JSON parsing errors and positions
+--
+
+-- | Represents an error that can be encountered while parsing
+data JSONError = Expected  Expected       String JS.Value
+               | BadFormat FormatExpected String T.Text
+               | MissingField
+               | MissingAlt [String]
+               | UnexpectedField
+               | UnexpectedEnumVal [T.Text] T.Text
+               | IntRangeError String Int IntRange
+               | UTCRangeError String UTCTime UTCRange
+               | RegexError String T.Text RegEx
+               | SyntaxError String
+  deriving (Eq, Show)
+
+-- | At present, we do not distinguish between errors and warnings
+type JSONWarning = JSONError
+
+-- | JSON type expected at a particular position, when a value of a
+-- different type was encountered
+data Expected = ExpArray
+              | ExpBool
+              | ExpInt
+              | ExpObject
+              | ExpString
+  deriving (Eq, Show)
+
+-- | Special format expected of a string
+data FormatExpected = FmtBinary
+                    | FmtUTC
+                    | FmtOther
+  deriving (Eq, Show)
+
+expectedArray, expectedBool, expectedInt, expectedObject, expectedString
+  :: JS.Value -> JSONError
+expectedArray  = Expected ExpArray    "Array"
+expectedBool   = Expected ExpBool     "Bool"
+expectedInt    = Expected ExpInt      "Int"
+expectedObject = Expected ExpObject   "Object"
+expectedString = Expected ExpString   "String"
+
+badFormat :: String -> T.Text -> JSONError
+badFormat = BadFormat FmtOther
+
+-- | Human-readable description of a JSON parse error
+prettyJSONError :: JSONError -> String
+prettyJSONError (Expected _ s v)      = "When expecting " ++ s ++ ", encountered "
+                                        ++ x ++ " instead"
+  where
+    x = case v of
+          JS.Object _ -> "Object"
+          JS.Array _  -> "Array"
+          JS.String _ -> "String"
+          JS.Number _ -> "Number"
+          JS.Bool _   -> "Boolean"
+          JS.Null     -> "Null"
+prettyJSONError (BadFormat _ s t)     = "Could not parse as " ++ s ++ " the string " ++ show t
+prettyJSONError MissingField          = "Field missing from Object"
+prettyJSONError (MissingAlt xs)       = "Missing alternative, expecting one of: "
+                                          ++ intercalate ", " xs
+prettyJSONError UnexpectedField       = "Unexpected field in Object"
+prettyJSONError (UnexpectedEnumVal xs t) = "Unexpected enum value " ++ show t
+                                           ++ ", expecting one of: "
+                                           ++ T.unpack (T.intercalate ", " xs)
+prettyJSONError (IntRangeError s i r) = s ++ ": " ++ show i ++ " not in range " ++ show r
+prettyJSONError (UTCRangeError s u r) = s ++ ": " ++ show u ++ " not in range " ++ show r
+prettyJSONError (RegexError s _ t)    = s ++ ": failed to match RE: " ++ show t
+prettyJSONError (SyntaxError e)       = "JSON syntax error: " ++ e
+
+-- | A position inside a JSON value is a list of steps, ordered
+-- innermost first (so going inside an object prepends a step).
+type Position = [Step]
+
+-- | Each step may be into a field of an object, or a specific element
+-- of an array.
+data Step = InField T.Text | InElem Int
+  deriving (Eq, Show)
+
+inField :: FieldName -> Step
+inField fn = InField (_FieldName fn)
+
+-- | Human-readable description of a single step in a position
+prettyStep :: Step -> String
+prettyStep (InField f) = "  in the field " ++ show f
+prettyStep (InElem i)  = "  in array index " ++ show i
+
+instance PPLines Step where
+  ppLines s = [prettyStep s]
+
+-- | Human-readable presentation of a list of parse errors with their
+-- positions
+prettyJSONErrorPositions :: [(JSONError, Position)] -> String
+prettyJSONErrorPositions xs = unlines $ concatMap help xs
+  where
+    help (e, pos) = prettyJSONError e : map prettyStep pos
+
+
+
+----------------------------------------------------------
+-- Validation and data migration errors
+--
+
+-- | Errors that can be discovered when migrating data values
+data ValueError
+    = JSONError JSONError                  -- ^ Data doesn't match schema
+    | CustomMigrationError String JS.Value -- ^ Error generated during custom migration
+    | InvalidAPI ApplyFailure              -- ^ An API change was invalid
+    deriving (Eq, Show)
+
+-- | Errors that may be discovered when validating a changelog
+data ValidateFailure
+        -- | the changelog must be in descending order of versions
+    = ChangelogOutOfOrder { vfLaterVersion   :: VersionExtra
+                          , vfEarlierVersion :: VersionExtra }
+        -- | forbid migrating from one version to an earlier version
+    | CannotDowngrade { vfFromVersion :: VersionExtra
+                      , vfToVersion   :: VersionExtra }
+        -- | an API uses types that are not declared
+    | ApiInvalid { vfInvalidVersion      :: VersionExtra
+                 , vfMissingDeclarations :: Set TypeName }
+        -- | changelog entry does not apply
+    | ChangelogEntryInvalid { vfSuccessfullyApplied :: [APITableChange]
+                            , vfFailedToApply       :: APIChange
+                            , vfApplyFailure        :: ApplyFailure }
+        -- | changelog is incomplete
+        --   (ie all entries apply ok but result isn't the target api)
+    | ChangelogIncomplete { vfChangelogVersion :: VersionExtra
+                          , vfTargetVersion    :: VersionExtra
+                          , vfDifferences      :: Map TypeName (MergeResult NormTypeDecl NormTypeDecl) }
+  deriving (Eq, Show)
+
+data ValidateWarning = ValidateWarning -- add warnings about bits we cannot check (opaque custom)
+  deriving Show
+
+-- | Errors that may occur applying a single API change
+data ApplyFailure
+    = TypeExists           { afExistingType  :: TypeName }     -- ^ for adding or renaming type
+    | TypeDoesNotExist     { afMissingType   :: TypeName }     -- ^ for deleting or renaming a type
+    | TypeWrongKind        { afTypeName      :: TypeName
+                           , afExpectedKind  :: TypeKind }     -- ^ e.g. it's not a record type
+    | TypeInUse            { afTypeName      :: TypeName }     -- ^ cannot delete/modify types that are still used
+    | TypeMalformed        { afType          :: APIType
+                           , afMissingTypes  :: Set TypeName } -- ^ type refers to a non-existent type
+    | DeclMalformed        { afTypeName      :: TypeName
+                           , afDecl          :: NormTypeDecl
+                           , afMissingTypes  :: Set TypeName } -- ^ decl refers to a non-existent type
+    | FieldExists          { afTypeName      :: TypeName
+                           , afTypeKind      :: TypeKind
+                           , afExistingField :: FieldName }    -- ^ for adding or renaming a field
+    | FieldDoesNotExist    { afTypeName      :: TypeName
+                           , afTypeKind      :: TypeKind
+                           , afMissingField  :: FieldName }    -- ^ for deleting or renaming a field
+    | FieldBadDefaultValue { afTypeName      :: TypeName
+                           , afFieldName     :: FieldName
+                           , afFieldType     :: APIType
+                           , afBadDefault    :: DefaultValue } -- ^ for adding a field, must be a default
+                                                               --   value compatible with the type
+    | DefaultMissing       { afTypeName      :: TypeName
+                           , afFieldName     :: FieldName }    -- ^ for adding a field to a table
+    | TableChangeError     { afCustomMessage :: String }       -- ^ custom error in tableChange
+  deriving (Eq, Show)
+
+data TypeKind = TKRecord | TKUnion | TKEnum | TKNewtype | TKTypeSynonym
+  deriving (Eq, Show)
+
+
+data MigrateFailure
+    = ValidateFailure ValidateFailure
+    | ValueError ValueError Position
+    deriving (Eq, Show)
+
+type MigrateWarning = ValidateWarning
+
+
+-------------------------------------
+-- Pretty-printing
+--
+
+prettyMigrateFailure :: MigrateFailure -> String
+prettyMigrateFailure = unlines . ppLines
+
+prettyValidateFailure :: ValidateFailure -> String
+prettyValidateFailure = unlines . ppLines
+
+prettyValueError :: ValueError -> String
+prettyValueError = unlines . ppLines
+
+prettyValueErrorPosition :: (ValueError, Position) -> String
+prettyValueErrorPosition = unlines . ppLines
+
+
+instance PP TypeKind where
+  pp TKRecord      = "record"
+  pp TKUnion       = "union"
+  pp TKEnum        = "enum"
+  pp TKNewtype     = "newtype"
+  pp TKTypeSynonym = "type"
+
+ppATypeKind :: TypeKind -> String
+ppATypeKind TKRecord      = "a record"
+ppATypeKind TKUnion       = "a union"
+ppATypeKind TKEnum        = "an enum"
+ppATypeKind TKNewtype     = "a newtype"
+ppATypeKind TKTypeSynonym = "a type synonym"
+
+ppMemberWord :: TypeKind -> String
+ppMemberWord TKRecord      = "field"
+ppMemberWord TKUnion       = "alternative"
+ppMemberWord TKEnum        = "value"
+ppMemberWord TKNewtype     = "member"
+ppMemberWord TKTypeSynonym = "member"
+
+
+instance PPLines MigrateFailure where
+  ppLines (ValidateFailure x) = ppLines x
+  ppLines (ValueError x ps)   = ppLines x ++ map prettyStep ps
+
+instance PPLines ValidateFailure where
+  ppLines (ChangelogOutOfOrder later earlier) =
+      ["Changelog out of order: version " ++ pp later
+           ++ " appears after version " ++ pp earlier]
+  ppLines (CannotDowngrade from to) =
+      ["Cannot downgrade from version " ++ pp from
+           ++ " to version " ++ pp to]
+  ppLines (ApiInvalid ver missing) =
+      ["Missing declarations in API version " ++ pp ver ++ ": " ++ pp missing]
+  ppLines (ChangelogEntryInvalid succs change af) =
+      ppLines af ++ ("when applying the change" : indent (ppLines change))
+          ++ if not (null succs)
+             then "after successfully applying the changes:"
+                  : indent (ppLines succs)
+             else []
+  ppLines (ChangelogIncomplete ver ver' diffs) =
+      ("Changelog incomplete! Differences between log version ("
+           ++ showVersionExtra ver ++ ") and latest version (" ++ showVersionExtra ver' ++ "):")
+      : indent (ppDiffs diffs)
+
+
+ppDiffs :: Map TypeName (MergeResult NormTypeDecl NormTypeDecl) -> [String]
+ppDiffs  = concatMap (uncurry ppDiff) . sortDiffs . Map.toList
+
+-- | Perform a topological sort of the differences, so that the
+-- pretty-printed form can be copied directly into the changelog.
+sortDiffs :: [(TypeName, MergeResult NormTypeDecl NormTypeDecl)]
+          -> [(TypeName, MergeResult NormTypeDecl NormTypeDecl)]
+sortDiffs = reverse . Graph.flattenSCCs . Graph.stronglyConnComp . map f
+  where
+    f (tn, mr) = ((tn, mr), tn, Set.toList (mergeResultFreeVars mr))
+
+mergeResultFreeVars :: MergeResult NormTypeDecl NormTypeDecl -> Set TypeName
+mergeResultFreeVars (OnlyInLeft  x) = typeDeclFreeVars x
+mergeResultFreeVars (OnlyInRight x) = typeDeclFreeVars x
+mergeResultFreeVars (InBoth x y)    = typeDeclFreeVars x `Set.union` typeDeclFreeVars y
+
+ppDiff :: TypeName -> MergeResult NormTypeDecl NormTypeDecl -> [String]
+ppDiff t (OnlyInLeft _)  = ["removed " ++ pp t]
+ppDiff t (OnlyInRight d) = ("added " ++ pp t ++ " ") `inFrontOf` ppLines d
+ppDiff t (InBoth (NRecordType flds) (NRecordType flds')) =
+    ("changed record " ++ pp t)
+    : (concatMap (uncurry (ppDiffFields "field")) $ Map.toList $ diffMaps flds flds')
+ppDiff t (InBoth (NUnionType alts) (NUnionType alts')) =
+    ("changed union " ++ pp t)
+    : (concatMap (uncurry (ppDiffFields "alternative")) $ Map.toList $ diffMaps alts alts')
+ppDiff t (InBoth (NEnumType vals) (NEnumType vals')) =
+    ("changed enum " ++ pp t)
+    :  (map (\ x -> "  alternative removed " ++ pp x) $ Set.toList $ vals  Set.\\ vals')
+    ++ (map (\ x -> "  alternative added " ++ pp x)   $ Set.toList $ vals' Set.\\ vals)
+ppDiff t (InBoth _ _) = ["incompatible definitions of " ++ pp t]
+
+ppDiffFields :: String -> FieldName -> MergeResult APIType APIType -> [String]
+ppDiffFields s f (OnlyInLeft _)   = ["  " ++ s ++ " removed " ++ pp f]
+ppDiffFields s f (OnlyInRight ty) = ["  " ++ s ++ " added " ++ pp f ++ " :: " ++ pp ty]
+ppDiffFields s f (InBoth ty ty')   = [ "  incompatible types for " ++ s ++ " " ++ pp f
+                                     , "    changelog type:      " ++ pp ty
+                                     , "    latest version type: " ++ pp ty' ]
+
+instance PPLines ApplyFailure where
+  ppLines (TypeExists t)                  = ["Type " ++ pp t ++ " already exists"]
+  ppLines (TypeDoesNotExist t)            = ["Type " ++ pp t ++ " does not exist"]
+  ppLines (TypeWrongKind t k)             = ["Type " ++ pp t ++ " is not " ++ ppATypeKind k]
+  ppLines (TypeInUse t)                   = ["Type " ++ pp t ++ " is in use, so it cannot be modified"]
+  ppLines (TypeMalformed ty xs)           = ["Type " ++ pp ty
+                                             ++ " is malformed, missing declarations:"
+                                            , "  " ++ pp xs]
+  ppLines (DeclMalformed t _ xs)          = [ "Declaration of " ++ pp t
+                                              ++ " is malformed, missing declarations:"
+                                            , "  " ++ pp xs]
+  ppLines (FieldExists t k f)             = ["Type " ++ pp t ++ " already has the "
+                                             ++ ppMemberWord k ++ " " ++ pp f]
+  ppLines (FieldDoesNotExist t k f)       = ["Type " ++ pp t ++ " does not have the "
+                                             ++ ppMemberWord k ++ " " ++ pp f]
+  ppLines (FieldBadDefaultValue _ _ ty v) = ["Default value " ++ pp v
+                                             ++ " is not compatible with the type " ++ pp ty]
+  ppLines (DefaultMissing t f)            = ["Field " ++ pp f ++ " does not have a default value, but "
+                                             ++ pp t ++ " occurs in the database"]
+  ppLines (TableChangeError s)            = ["Error when detecting changed tables:", "  " ++ s]
+
+
+instance PPLines ValueError where
+  ppLines (JSONError e)              = [prettyJSONError e]
+  ppLines (CustomMigrationError e v) = [ "Custom migration error:", "  " ++ e
+                                       , "when migrating value"] ++ indent (ppLines v)
+  ppLines (InvalidAPI af)            = "Invalid API detected during value migration:"
+                                       : indent (ppLines af)
+
+
+$(deriveJSON defaultOptions ''JSONError)
+$(deriveJSON defaultOptions ''Expected)
+$(deriveJSON defaultOptions ''FormatExpected)
+$(deriveJSON defaultOptions ''Step)
+$(SC.deriveSafeCopy 1 'SC.base ''Step)
diff --git a/src/Data/API/JSON.hs b/src/Data/API/JSON.hs
--- a/src/Data/API/JSON.hs
+++ b/src/Data/API/JSON.hs
@@ -9,19 +9,8 @@
 -- independent errors rather than stopping on the first one
 -- encountered.
 module Data.API.JSON
-    ( -- * Representation of JSON parsing errors
-      JSONError(..)
-    , JSONWarning
-    , Expected(..)
-    , FormatExpected(..)
-    , Position
-    , Step(..)
-    , prettyJSONErrorPositions
-    , prettyJSONError
-    , prettyStep
-
-      -- * Parser with multiple error support
-    , ParserWithErrs
+    ( -- * Parser with multiple error support
+      ParserWithErrs
     , ParseFlags(useDefaults, enforceReadOnlyFields, enforceFilters)
     , defaultParseFlags
     , runParserWithErrsTop
@@ -37,13 +26,6 @@
 
       -- * ParserWithErrs combinators
     , withParseFlags
-    , failWith
-    , expectedArray
-    , expectedBool
-    , expectedInt
-    , expectedObject
-    , expectedString
-    , badFormat
     , withInt
     , withIntRange
     , withBinary
@@ -58,8 +40,29 @@
     , (.:.)
     , (.::)
     , withUnion
+
+      -- * Representation of JSON parsing errors
+    , JSONError(..)
+    , JSONWarning
+    , Expected(..)
+    , FormatExpected(..)
+    , Position
+    , Step(..)
+    , prettyJSONErrorPositions
+    , prettyJSONError
+    , prettyStep
+
+      -- * Error construction
+    , failWith
+    , expectedArray
+    , expectedBool
+    , expectedInt
+    , expectedObject
+    , expectedString
+    , badFormat
     ) where
 
+import           Data.API.Error
 import           Data.API.Types
 import           Data.API.Utils
 
@@ -67,15 +70,12 @@
 import qualified Data.Aeson                     as JS
 import qualified Data.Aeson.Parser              as JS
 import qualified Data.Aeson.Types               as JS
-import           Data.Aeson.TH
 import           Data.Attoparsec.ByteString
 import qualified Data.ByteString.Char8          as B
 import qualified Data.ByteString.Base64         as B64
 import qualified Data.ByteString.Lazy           as BL
 import qualified Data.HashMap.Strict            as HMap
-import           Data.List
 import           Data.Maybe
-import qualified Data.SafeCopy                  as SC
 import qualified Data.Text                      as T
 import qualified Data.Text.Encoding             as T
 import           Data.Time
@@ -84,98 +84,7 @@
 import           Data.Version
 import           Distribution.Text
 import           Text.Regex
-
-----------------------------------------------------------
--- Representation of JSON parsing errors and positions
---
-
--- | Represents an error that can be encountered while parsing
-data JSONError = Expected  Expected       String JS.Value
-               | BadFormat FormatExpected String T.Text
-               | MissingField
-               | MissingAlt [String]
-               | UnexpectedField
-               | UnexpectedEnumVal [T.Text] T.Text
-               | IntRangeError String Int IntRange
-               | UTCRangeError String UTCTime UTCRange
-               | RegexError String T.Text RegEx
-               | SyntaxError String
-  deriving (Eq, Show)
-
--- | At present, we do not distinguish between errors and warnings
-type JSONWarning = JSONError
-
--- | JSON type expected at a particular position, when a value of a
--- different type was encountered
-data Expected = ExpArray
-              | ExpBool
-              | ExpInt
-              | ExpObject
-              | ExpString
-  deriving (Eq, Show)
-
--- | Special format expected of a string
-data FormatExpected = FmtBinary
-                    | FmtUTC
-                    | FmtOther
-  deriving (Eq, Show)
-
-expectedArray, expectedBool, expectedInt, expectedObject, expectedString
-  :: JS.Value -> JSONError
-expectedArray  = Expected ExpArray    "Array"
-expectedBool   = Expected ExpBool     "Bool"
-expectedInt    = Expected ExpInt      "Int"
-expectedObject = Expected ExpObject   "Object"
-expectedString = Expected ExpString   "String"
-
-badFormat :: String -> T.Text -> JSONError
-badFormat = BadFormat FmtOther
-
--- | Human-readable description of a JSON parse error
-prettyJSONError :: JSONError -> String
-prettyJSONError (Expected _ s v)      = "When expecting " ++ s ++ ", encountered "
-                                        ++ x ++ " instead"
-  where
-    x = case v of
-          JS.Object _ -> "Object"
-          JS.Array _  -> "Array"
-          JS.String _ -> "String"
-          JS.Number _ -> "Number"
-          JS.Bool _   -> "Boolean"
-          JS.Null     -> "Null"
-prettyJSONError (BadFormat _ s t)     = "Could not parse as " ++ s ++ " the string " ++ show t
-prettyJSONError MissingField          = "Field missing from Object"
-prettyJSONError (MissingAlt xs)       = "Missing alternative, expecting one of: "
-                                          ++ intercalate ", " xs
-prettyJSONError UnexpectedField       = "Unexpected field in Object"
-prettyJSONError (UnexpectedEnumVal xs t) = "Unexpected enum value " ++ show t
-                                           ++ ", expecting one of: "
-                                           ++ T.unpack (T.intercalate ", " xs)
-prettyJSONError (IntRangeError s i r) = s ++ ": " ++ show i ++ " not in range " ++ show r
-prettyJSONError (UTCRangeError s u r) = s ++ ": " ++ show u ++ " not in range " ++ show r
-prettyJSONError (RegexError s _ t)    = s ++ ": failed to match RE: " ++ show t
-prettyJSONError (SyntaxError e)       = "JSON syntax error: " ++ e
-
--- | A position inside a JSON value is a list of steps, ordered
--- innermost first (so going inside an object prepends a step).
-type Position = [Step]
-
--- | Each step may be into a field of an object, or a specific element
--- of an array.
-data Step = InField T.Text | InElem Int
-  deriving (Eq, Show)
-
--- | Human-readable description of a single step in a position
-prettyStep :: Step -> String
-prettyStep (InField f) = "  in the field " ++ show f
-prettyStep (InElem i)  = "  in array index " ++ show i
-
--- | Human-readable presentation of a list of parse errors with their
--- positions
-prettyJSONErrorPositions :: [(JSONError, Position)] -> String
-prettyJSONErrorPositions xs = unlines $ concatMap help xs
-  where
-    help (e, pos) = prettyJSONError e : map prettyStep pos
+import           Prelude
 
 
 ----------------------------------------
@@ -387,18 +296,17 @@
                                                                                else warning err >> m
 
 
--- It's contrary to my principles, but I'll accept a string containing
--- a number instead of an actual number...
+-- | It's contrary to my principles, but I'll accept a string containing
+-- a number instead of an actual number, and will silently truncate
+-- floating point numbers to integers...
 withInt :: String -> (Int -> ParserWithErrs a) -> JS.Value -> ParserWithErrs a
 withInt = withNum
 
-withNum :: JS.FromJSON n => String -> (n -> ParserWithErrs a) -> JS.Value -> ParserWithErrs a
-withNum s f v = case JS.fromJSON v of
-  JS.Success i -> f i
-  JS.Error _ | JS.String t  <- v
-             , Right v'     <- parseOnly (JS.value <* endOfInput) (T.encodeUtf8 t)
-             , JS.Success i <- JS.fromJSON v' -> f i
-             | otherwise                      -> failWith $ Expected ExpInt s v
+withNum :: Integral n => String -> (n -> ParserWithErrs a) -> JS.Value -> ParserWithErrs a
+withNum _ f (JS.Number n) = f (truncate n)
+withNum s f (JS.String t)
+  | Right v' <- parseOnly (JS.value <* endOfInput) (T.encodeUtf8 t) = withNum s f v'
+withNum s _ v = failWith $ Expected ExpInt s v
 
 withIntRange :: IntRange -> String -> (Int -> ParserWithErrs a)
              -> JS.Value -> ParserWithErrs a
@@ -500,10 +408,3 @@
       []       -> failWith $ MissingAlt $ map (T.unpack . fst) xs
       _:_:_    -> failWith UnexpectedField
 withUnion _ val = failWith $ Expected ExpObject "Union" val
-
-
-deriveJSON defaultOptions ''JSONError
-deriveJSON defaultOptions ''Expected
-deriveJSON defaultOptions ''FormatExpected
-deriveJSON defaultOptions ''Step
-$(SC.deriveSafeCopy 1 'SC.base ''Step)
diff --git a/src/Data/API/JSONToCBOR.hs b/src/Data/API/JSONToCBOR.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/API/JSONToCBOR.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE BangPatterns #-}
+module Data.API.JSONToCBOR
+    ( serialiseJSONWithSchema
+    , jsonToCBORWithSchema
+    , deserialiseJSONWithSchema
+    , postprocessJSON
+    ) where
+
+import           Data.API.Changes
+import           Data.API.JSON
+import           Data.API.Types
+import           Data.API.Utils
+
+import           Control.Applicative
+import           Data.Aeson hiding (encode)
+import qualified Data.ByteString.Base64         as B64
+import qualified Data.ByteString.Lazy           as LBS
+import qualified Data.HashMap.Strict            as HMap
+import qualified Data.Map                       as Map
+import           Data.Traversable
+import qualified Data.Vector                    as Vec
+import           Codec.Serialise     as CBOR
+import           Data.Binary.Serialise.CBOR.JSON (cborToJson, jsonToCbor)
+import           Codec.CBOR.Term
+import           Data.Fixed (Pico)
+import           Data.Maybe (fromMaybe)
+import           Data.Scientific
+import qualified Data.Text                      as T
+import qualified Data.Text.Encoding             as TE
+import           Data.Time.Clock.POSIX
+import           Data.Time (UTCTime(UTCTime))
+import           Prelude
+
+
+-- | Serialise a JSON value as a CBOR term in a generic but
+-- schema-dependent fashion.  This is necessary because the JSON
+-- representation carries less information than we need in CBOR
+-- (e.g. it lacks a distinction between bytestrings and text).
+serialiseJSONWithSchema :: API -> TypeName -> Value -> LBS.ByteString
+serialiseJSONWithSchema api tn v = serialise $ jsonToCBORWithSchema api tn v
+
+-- | Convert a JSON value into a CBOR term in a generic but
+-- schema-dependent fashion.
+jsonToCBORWithSchema :: API -> TypeName -> Value -> Term
+jsonToCBORWithSchema = jsonToCBORTypeName . apiNormalForm
+
+jsonToCBORTypeName :: NormAPI -> TypeName -> Value -> Term
+jsonToCBORTypeName napi tn v =
+    case Map.lookup tn napi of
+      Just (NRecordType nrt) -> jsonToCBORRecord napi nrt v
+      Just (NUnionType  nut) -> jsonToCBORUnion  napi nut v
+      Just (NEnumType   net) -> jsonToCBOREnum   napi net v
+      Just (NTypeSynonym ty) -> jsonToCBORType   napi ty  v
+      Just (NNewtype     bt) -> jsonToCBORBasic       bt  v
+      Nothing                -> error $ "serialiseJSONWithSchema: missing definition for type "
+                                          ++ T.unpack (_TypeName tn)
+
+jsonToCBORType :: NormAPI -> APIType -> Value -> Term
+jsonToCBORType napi ty0 v = case (ty0, v) of
+    (TyList  ty, Array arr) | Vec.null arr -> TList []
+                            | otherwise    -> TListI $ map (jsonToCBORType napi ty) (Vec.toList arr)
+    (TyList  _ , _)         -> error "serialiseJSONWithSchema: expected array"
+    (TyMaybe _ , Null)      -> TList []
+    (TyMaybe ty, _)         -> TList [jsonToCBORType napi ty v]
+    (TyName  tn, _)         -> jsonToCBORTypeName napi tn v
+    (TyBasic bt, _)         -> jsonToCBORBasic bt v
+    (TyJSON    , _)         -> jsonToCbor v
+
+-- | Encode a record as a map from field names to values.  Crucially,
+-- the fields are in ascending order by field name.
+jsonToCBORRecord :: NormAPI -> NormRecordType -> Value -> Term
+jsonToCBORRecord napi nrt v = case v of
+    Object hm -> TMap $ map (f hm) $ Map.toAscList nrt
+    _         -> error "serialiseJSONWithSchema: expected object"
+  where
+    f hm (fn, ty) = case HMap.lookup (_FieldName fn) hm of
+                      Nothing -> error $ "serialiseJSONWithSchema: missing field " ++ T.unpack (_FieldName fn)
+                      Just v' -> (TString (_FieldName fn), jsonToCBORType napi ty v')
+
+-- | Encode a union as a single-element map from the field name to the value.
+jsonToCBORUnion :: NormAPI -> NormUnionType -> Value -> Term
+jsonToCBORUnion napi nut v = case v of
+    Object hm | [(k, r)] <- HMap.toList hm -> case Map.lookup (FieldName k) nut of
+       Just ty -> TMap [(TString k, jsonToCBORType napi ty r)]
+       Nothing -> error "serialiseJSONWithSchema: unexpected alternative in union"
+    _ -> error "serialiseJSONWithSchema: expected single-field object"
+
+-- | Encode an enumerated value as its name; we do not check that it
+-- actually belongs to the type here.
+jsonToCBOREnum :: NormAPI -> NormEnumType -> Value -> Term
+jsonToCBOREnum _ _ v = case v of
+                         String t -> TString t
+                         _        -> error "serialiseJSONWithSchema: expected string"
+
+jsonToCBORBasic :: BasicType -> Value -> Term
+jsonToCBORBasic bt v = case (bt, v) of
+    (BTstring, String t) -> TString t
+    (BTstring, _)        -> error "serialiseJSONWithSchema: expected string"
+    (BTbinary, String t) -> case B64.decode $ TE.encodeUtf8 t of
+                              Left  err-> error $ "serialiseJSONWithSchema: base64-decoding failed: " ++ err
+                              Right bs -> TBytes bs
+    (BTbinary, _)        -> error "serialiseJSONWithSchema: expected string"
+    (BTbool  , Bool b)   -> TBool b
+    (BTbool  , _)        -> error "serialiseJSONWithSchema: expected bool"
+    (BTint   , Number n) | Right i <- (floatingOrInteger n :: Either Double Int) -> TInt i
+    (BTint   , _)        -> error "serialiseJSONWithSchema: expected integer"
+    (BTutc   , String t) ->
+      TTagged 1000 (TMap [ (TInt 1, TInt secs)
+                         , (TInt (-12), TInt psecs) ])
+        where  -- taken from @Codec.Serialise.Class@:
+          (secs, frac) = case properFraction $ utcTimeToPOSIXSeconds utc of
+                           -- fractional part must be positive
+                           (secs', frac')
+                             | frac' < 0  -> (secs' - 1, frac' + 1)
+                             | otherwise -> (secs', frac')
+          psecs = round $ frac * 1000000000000
+          utc = fromMaybe (error $ "jsonToCBORBasic: " ++ T.unpack t) $
+                  parseUTC' t
+    (BTutc   , _)        -> error "serialiseJSONWithSchema: expected string"
+
+
+-- | When a JSON value has been deserialised from CBOR, the
+-- representation may need some modifications in order to match the
+-- result of 'toJSON' on a Haskell datatype.  In particular, Aeson's
+-- representation of 'Maybe' does not round-trip (because 'Nothing' is
+-- encoded as 'Null' and @'Just' x@ as @'toJSON' x@), so CBOR uses a
+-- different representation (as an empty or 1-element list).
+deserialiseJSONWithSchema :: API -> TypeName -> LBS.ByteString -> Value
+deserialiseJSONWithSchema api tn bs = case postprocessJSON api tn (cborToJson (deserialise bs)) of
+    Right v  -> v
+    Left err -> error $ "deserialiseJSONWithSchema could not post-process: " ++ prettyValueError err
+
+postprocessJSON :: API -> TypeName -> Value -> Either ValueError Value
+postprocessJSON api = postprocessJSONTypeName (apiNormalForm api)
+
+postprocessJSONTypeName :: NormAPI -> TypeName -> Value -> Either ValueError Value
+postprocessJSONTypeName napi tn v = do
+    t <- Map.lookup tn napi ?! InvalidAPI (TypeDoesNotExist tn)
+    case t of
+      NRecordType nrt -> postprocessJSONRecord napi nrt v
+      NUnionType  nut -> postprocessJSONUnion  napi nut v
+      NEnumType    _  -> pure v
+      NTypeSynonym ty -> postprocessJSONType   napi ty  v
+      NNewtype     bt -> postprocessJSONType   napi (TyBasic bt) v
+
+postprocessJSONType :: NormAPI -> APIType -> Value -> Either ValueError Value
+postprocessJSONType napi ty0 v = case ty0 of
+    TyList ty  -> case v of
+                   Array arr -> Array <$> traverse (postprocessJSONType napi ty) arr
+                   _         -> Left $ JSONError $ expectedArray v
+    TyMaybe ty -> case v of
+                    Array arr -> case Vec.toList arr of
+                                   []    -> pure Null
+                                   [v1]  -> postprocessJSONType napi ty v1
+                                   _:_:_ -> Left $ JSONError $ SyntaxError "over-long array when converting Maybe value"
+                    _         -> Left $ JSONError $ expectedArray v
+    TyName tn  -> postprocessJSONTypeName napi tn v
+    TyBasic BTutc -> case v of
+      Object obj -> case HMap.toList obj of
+        [(k1, Number v0), (km12, Number v1)]
+          | T.unpack k1 == "1" && T.unpack km12 == "-12" ->
+          -- Taken from @Codec.Serialise.Class@:
+          let psecs :: Pico
+              psecs = realToFrac v1 / 1000000000000
+
+              dt :: POSIXTime
+              dt = realToFrac v0 + realToFrac psecs
+
+          in pure $! String $! mkUTC' $! forceUTCTime (posixSecondsToUTCTime dt)
+        _ -> Left $ JSONError UnexpectedField
+      String t -> case parseUTC' t of
+        Nothing -> Left $ JSONError $ SyntaxError $
+                     "UTC time in wrong format: " ++ T.unpack t
+        Just utcTime -> pure $! String $! mkUTC' $! forceUTCTime utcTime
+      _ -> Left $ JSONError $ expectedObject v
+    TyBasic _  -> pure v
+    TyJSON     -> pure v
+
+-- | Force the unnecessarily lazy @'UTCTime'@ representation.
+forceUTCTime :: UTCTime -> UTCTime
+forceUTCTime t@(UTCTime !_day !_daytime) = t
+
+postprocessJSONRecord :: NormAPI -> NormRecordType -> Value -> Either ValueError Value
+postprocessJSONRecord napi nrt v = case v of
+    Object hm -> Object <$> HMap.traverseWithKey f hm
+    _         -> Left $ JSONError $ expectedObject v
+  where
+    f t v' = do ty <- Map.lookup (FieldName t) nrt ?! JSONError UnexpectedField
+                postprocessJSONType napi ty v'
+
+postprocessJSONUnion :: NormAPI -> NormUnionType -> Value -> Either ValueError Value
+postprocessJSONUnion napi nut v = case v of
+    Object hm | [(k, r)] <- HMap.toList hm
+              , Just ty <- Map.lookup (FieldName k) nut
+              -> Object . HMap.singleton k <$> postprocessJSONType napi ty r
+    _ -> Left $ JSONError $ expectedObject v
diff --git a/src/Data/API/Markdown.hs b/src/Data/API/Markdown.hs
--- a/src/Data/API/Markdown.hs
+++ b/src/Data/API/Markdown.hs
@@ -3,7 +3,7 @@
 -- | This module generates Markdown-formatted documentation for an
 -- API, like this:
 --
--- > ###Foo
+-- > ### Foo
 -- >
 -- > a test defn
 -- >
@@ -26,6 +26,7 @@
 
 import qualified Data.CaseInsensitive       as CI
 import           Data.Char
+import qualified Data.Text                  as T
 import           Text.Printf
 import           Control.Applicative
 import           Control.Lens
@@ -42,7 +43,7 @@
 defaultMarkdownMethods :: MarkdownMethods
 defaultMarkdownMethods =
     MDM { mdmSummaryPostfix = const ""
-        , mdmLink           = _TypeName
+        , mdmLink           = T.unpack . _TypeName
         , mdmPp             = (++)
         , mdmFieldDefault   = \ _ _ -> Nothing
         }
@@ -64,7 +65,7 @@
 
 header :: MarkdownMethods -> APINode -> MDComment -> MDComment
 header mdm an tl_md =
-                                printf "###%s\n\n%s\n\n%s" nm_md (mdmPp mdm cm_md "") tl_md
+                                printf "### %s\n\n%s\n\n%s" nm_md (mdmPp mdm cm_md "") tl_md
   where
     nm_md = type_name_md an
     cm_md = comment_md   an
@@ -107,13 +108,13 @@
 
     dhs          = (replicate lnx '-',replicate 7 '-')
 
-    lnx          = maximum $ 0 : map (length . _FieldName . fst) seAlts
+    lnx          = maximum $ 0 : map (T.length . _FieldName . fst) seAlts
 
     rws          = map fmt seAlts
 
     hdr          = ("Enumeration","Comment")
 
-    fmt (fn0,ct) = (_FieldName fn0,mdmPp mdm "" $ cln ct)
+    fmt (fn0,ct) = (T.unpack (_FieldName fn0), mdmPp mdm "" $ cln ct)
 
     cln ct       = reverse $ dropWhile isSpace $ reverse $ map tr ct
       where
@@ -143,7 +144,7 @@
 
     fmt (fn0,fty) = ( fn, type_md mdm ty, flg_md, mdmPp mdm "" $ cleanComment ct )
       where
-        fn  = _FieldName fn0
+        fn  = T.unpack (_FieldName fn0)
         ty  = ftType fty
         ct  = ftComment fty
 
@@ -174,7 +175,7 @@
 
     fmt (fn0,(ty,ct)) = ("_" ++ fn ++ "_",type_md mdm ty,mdmPp mdm "" $ cleanComment ct)
       where
-        fn  = _FieldName fn0
+        fn  = T.unpack (_FieldName fn0)
 
 cleanComment :: MDComment -> MDComment
 cleanComment ct = reverse $ dropWhile isSpace $ reverse $ map tr ct
@@ -220,7 +221,7 @@
       BTutc    -> "utc"
 
 type_name_md, prefix_md, comment_md :: APINode -> MDComment
-type_name_md = _TypeName   . anName
+type_name_md = T.unpack . _TypeName . anName
 prefix_md    = CI.original . anPrefix
 comment_md   =               anComment
 
diff --git a/src/Data/API/NormalForm.hs b/src/Data/API/NormalForm.hs
--- a/src/Data/API/NormalForm.hs
+++ b/src/Data/API/NormalForm.hs
@@ -36,6 +36,7 @@
 import           Data.API.PP
 import           Data.API.Types
 
+import           Control.DeepSeq
 import           Data.Map (Map)
 import qualified Data.Map as Map
 import           Data.Set (Set)
@@ -64,6 +65,13 @@
     | NTypeSynonym APIType
     | NNewtype     BasicType
   deriving (Eq, Show)
+
+instance NFData NormTypeDecl where
+  rnf (NRecordType  x) = rnf x
+  rnf (NUnionType   x) = rnf x
+  rnf (NEnumType    x) = rnf x
+  rnf (NTypeSynonym x) = rnf x
+  rnf (NNewtype     x) = rnf x
 
 -- | The canonical form of a record type is a map from fields to
 -- values...
diff --git a/src/Data/API/PP.hs b/src/Data/API/PP.hs
--- a/src/Data/API/PP.hs
+++ b/src/Data/API/PP.hs
@@ -8,7 +8,7 @@
     , indent
     ) where
 
-import           Data.API.JSON
+import           Data.API.Scan (keywords)
 import           Data.API.Types
 
 import qualified Data.Aeson                     as JS
@@ -52,10 +52,13 @@
   ppLines v = lines $ BL.unpack $ JS.encodePretty v
 
 instance PP TypeName where
-  pp = _TypeName
+  pp = T.unpack . _TypeName
 
 instance PP FieldName where
-  pp = _FieldName
+  pp (FieldName fn_t) | fn `elem` keywords = "'" ++ fn ++ "'"
+                      | otherwise          = fn
+    where
+      fn = T.unpack fn_t
 
 instance PP APIType where
   pp (TyList  ty) = "[" ++ pp ty ++ "]"
@@ -86,6 +89,3 @@
 
 instance (PPLines s, PPLines t) => PPLines (s, t) where
   ppLines (s, t) = ppLines s ++ ppLines t
-
-instance PPLines Step where
-  ppLines s = [prettyStep s]
diff --git a/src/Data/API/Parse.y b/src/Data/API/Parse.y
--- a/src/Data/API/Parse.y
+++ b/src/Data/API/Parse.y
@@ -98,8 +98,8 @@
 
 Node :: { APINode }
 Node
-    : Prefix '::' typeiden Comments '=' Spec With
-                                        { APINode (TypeName $3) $4 $1 $6 $7 }
+    : Prefix '::' TypeName Comments '=' Spec With
+                                        { APINode $3 $4 $1 $6 $7 }
 
 Spec :: { Spec }
 Spec
@@ -188,7 +188,7 @@
 Type
     : '?' Type                          { TyMaybe            $2             }
     | '[' Type ']'                      { TyList             $2             }
-    | typeiden                          { TyName   (TypeName $1)            }
+    | TypeName                          { TyName             $1             }
     | BasicType                         { TyBasic            $1             }
     | json                              { TyJSON                            }
 
@@ -206,7 +206,7 @@
 
 FieldName :: { FieldName }
 FieldName
-    : VarIdentifier                     { FieldName $1                      }
+    : VarIdentifier                     { FieldName (T.pack $1)             }
 
 VarIdentifier :: { String }
     : variden                           { $1                                }
@@ -216,7 +216,7 @@
     | to                                { "to"                              }
 
 TypeName :: { TypeName }
-    : typeiden                          { TypeName $1                       }
+    : typeiden                          { TypeName (T.pack $1)              }
 
 APIChangelog :: { APIChangelog }
 APIChangelog
diff --git a/src/Data/API/Scan.x b/src/Data/API/Scan.x
--- a/src/Data/API/Scan.x
+++ b/src/Data/API/Scan.x
@@ -6,6 +6,7 @@
     , PToken
     , AlexPosn(..)
     , Token(..)
+    , keywords
     ) where
 
 import           Data.API.Types
@@ -41,8 +42,8 @@
     ">="                                { simple    GtEq            }
     "?"                                 { simple    Query           }
     ","                                 { simple    Comma           }
-    version                             { simple    Version         }
-    with                                { simple    With            }    
+    version                             { simple    Version         } -- N.B. extend the 'keywords list below
+    with                                { simple    With            } -- when adding new keywords!
     integer                             { simple    Integer         }
     boolean                             { simple    Boolean         }
     utc                                 { simple    UTC             }
@@ -78,6 +79,14 @@
     "(*"(\n|[^\*]|\*[^\)])*"*)"         { block_comment             }
 
 {
+
+keywords :: [String]
+keywords = [ "version", "with", "integer", "boolean", "utc", "string"
+           , "binary", "json", "record", "union", "enum", "basic", "changes"
+           , "added", "removed", "renamed", "changed", "default", "field"
+           , "alternative", "migration", "to", "nothing", "true", "false"
+           , "read-only"
+           ]
 
 type PToken = (AlexPosn,Token)
 
diff --git a/src/Data/API/TH.hs b/src/Data/API/TH.hs
--- a/src/Data/API/TH.hs
+++ b/src/Data/API/TH.hs
@@ -9,14 +9,21 @@
     , funSigD
     , simpleD
     , simpleSigD
+    , mkNameText
+    , fieldNameE
+    , fieldNameVarE
+    , typeNameE
     ) where
 
+import           Data.API.TH.Compat
 import           Data.API.Tools.Combinators
+import           Data.API.Types
 
 import           Control.Applicative
 import           Control.Monad
+import qualified Data.Text                      as T
 import           Language.Haskell.TH
-
+import           Prelude
 
 -- | Construct an idiomatic expression (an expression in an
 -- Applicative context), i.e.
@@ -45,7 +52,7 @@
     exists <- isInstance c ts
     if exists then do when (warnOnOmittedInstance stgs) $ reportWarning $ msg ts
                       return []
-              else return [InstanceD [] (foldl AppT (ConT c) ts) ds]
+              else return [mkInstanceD [] (foldl AppT (ConT c) ts) ds]
   where
     msg ts = "instance " ++ pprint c ++ " " ++ pprint ts ++ " already exists, so it was not generated"
 
@@ -61,3 +68,19 @@
 -- | Construct a simple TH definition with a type signature
 simpleSigD :: Name -> TypeQ -> ExpQ -> Q [Dec]
 simpleSigD n t e = funSigD n t [clause [] (normalB e) []]
+
+
+mkNameText :: T.Text -> Name
+mkNameText = mkName . T.unpack
+
+
+-- | Field name as a string expression
+fieldNameE :: FieldName -> ExpQ
+fieldNameE = stringE . T.unpack . _FieldName
+
+-- | Field name as a variable
+fieldNameVarE :: FieldName -> ExpQ
+fieldNameVarE = varE . mkNameText . _FieldName
+
+typeNameE :: TypeName -> ExpQ
+typeNameE = stringE . T.unpack . _TypeName
diff --git a/src/Data/API/TH/Compat.hs b/src/Data/API/TH/Compat.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/API/TH/Compat.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE CPP #-}
+module Data.API.TH.Compat where
+
+import Language.Haskell.TH
+
+mkDataD :: Cxt -> Name -> [TyVarBndr] -> [Con] -> [Name] -> Dec
+mkDataD cxt1 name tyVarBndrs cons drvs =
+#if MIN_VERSION_template_haskell(2,11,0)
+  DataD cxt1 name tyVarBndrs Nothing cons (map ConT drvs)
+#else
+  DataD cxt1 name tyVarBndrs cons drvs
+#endif
+
+mkInstanceD :: Cxt -> Type -> [Dec] -> Dec
+mkInstanceD =
+#if MIN_VERSION_template_haskell(2,11,0)
+  InstanceD Nothing
+#else
+  InstanceD
+#endif
+
+mkNewtypeD :: Cxt -> Name -> [TyVarBndr] -> Con -> [Name] -> Dec
+mkNewtypeD cxt1 name tyVarBndrs cons drvs =
+#if MIN_VERSION_template_haskell(2,11,0)
+  NewtypeD cxt1 name tyVarBndrs Nothing cons (map ConT drvs)
+#else
+  NewtypeD cxt1 name tyVarBndrs cons drvs
+#endif
+
+----------------------------------------
+
+type Strictness =
+#if MIN_VERSION_template_haskell(2,11,0)
+  Bang
+#else
+  Strict
+#endif
+
+annIsStrict :: Strictness
+annIsStrict =
+#if MIN_VERSION_template_haskell(2,11,0)
+  Bang NoSourceUnpackedness SourceStrict
+#else
+  IsStrict
+#endif
+
+annNotStrict :: Strictness
+annNotStrict =
+#if MIN_VERSION_template_haskell(2,11,0)
+  Bang NoSourceUnpackedness NoSourceStrictness
+#else
+  NotStrict
+#endif
diff --git a/src/Data/API/Tools.hs b/src/Data/API/Tools.hs
--- a/src/Data/API/Tools.hs
+++ b/src/Data/API/Tools.hs
@@ -27,7 +27,13 @@
     , deepSeqTool
     , jsonTool
     , jsonTool'
+    , cborTool
     , jsonTestsTool
+    , cborTestsTool
+    , cborToJSONTestsTool
+    , jsonToCBORTestsTool
+    , jsonGenericValueTestsTool
+    , cborGenericValueTestsTool
     , lensTool
     , quickCheckTool
     , safeCopyTool
@@ -39,6 +45,7 @@
 import           Data.API.Tools.DeepSeq
 import           Data.API.Tools.Enum
 import           Data.API.Tools.Example
+import           Data.API.Tools.CBOR
 import           Data.API.Tools.JSON
 import           Data.API.Tools.JSONTests
 import           Data.API.Tools.Lens
@@ -46,7 +53,7 @@
 import           Data.API.Tools.SafeCopy
 import           Data.API.Types
 
-import           Data.Monoid
+import qualified Data.Monoid                    as Monoid
 import           Language.Haskell.TH
 
 
@@ -70,4 +77,4 @@
 -- | Apply a list of tools to an 'API', generating TH declarations.
 -- This form allows the 'ToolSettings' to be overridden.
 generateAPIToolsWith :: ToolSettings -> API -> [APITool] -> Q [Dec]
-generateAPIToolsWith ts api tools = runTool (mconcat tools) ts api
+generateAPIToolsWith ts api tools = runTool (Monoid.mconcat tools) ts api
diff --git a/src/Data/API/Tools/CBOR.hs b/src/Data/API/Tools/CBOR.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/API/Tools/CBOR.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE CPP                        #-}
+{-# LANGUAGE TemplateHaskell            #-}
+
+module Data.API.Tools.CBOR
+    ( cborTool
+    ) where
+
+import           Data.API.TH
+import           Data.API.Tools.Combinators
+import           Data.API.Tools.Datatypes
+import           Data.API.Tools.Enum
+import           Data.API.Types
+
+import           Control.Applicative
+import           Codec.Serialise.Class
+import           Codec.Serialise.Decoding
+import           Codec.Serialise.Encoding
+import           Data.Binary.Serialise.CBOR.Extra
+import           Data.List (foldl', sortBy)
+import qualified Data.Map                       as Map
+import           Data.Monoid
+import           Data.Ord (comparing)
+import qualified Data.Text                      as T
+import           Language.Haskell.TH
+import           Prelude
+
+-- | Tool to generate 'Serialise' instances for types generated by
+-- 'datatypesTool'. This depends on 'enumTool'.
+cborTool :: APITool
+cborTool = apiNodeTool $
+             apiSpecTool gen_sn_to gen_sr_to gen_su_to gen_se_to mempty
+             <> gen_pr
+
+{-
+instance Serialise JobId where
+    encode = encode . _JobId
+    decode = JobId <$> decode
+
+In this version we don't check the @snFilter@, for simplicity and speed.
+This is safe, since the CBOR code is used only internally as a data
+representation format, not as a communication format with clients
+that could potentially send faulty data.
+-}
+
+gen_sn_to :: Tool (APINode, SpecNewtype)
+gen_sn_to = mkTool $ \ ts (an, sn) -> optionalInstanceD ts ''Serialise [nodeRepT an]
+                                          [ simpleD 'encode (bdy_in an sn)
+                                          , simpleD 'decode (bdy_out ts an sn)]
+  where
+    bdy_in an sn = [e| $(ine sn) . $(newtypeProjectionE an) |]
+    bdy_out ts an sn = [e| $(nodeNewtypeConE ts an sn) <$> $(oute sn) |]
+
+    ine sn = case snType sn of
+            BTstring -> [e| encodeString |]
+            BTbinary -> [e| encode |]
+            BTbool   -> [e| encodeBool |]
+            BTint    -> [e| encodeInt |]
+            BTutc    -> [e| encode |]
+
+
+    oute sn =
+        case snType sn of
+            BTstring -> [e| decodeString |]
+            BTbinary -> [e| decode |]
+            BTbool   -> [e| decodeBool |]
+            BTint    -> [e| decodeInt |]
+            BTutc    -> [e| decode |]
+
+
+
+{-
+instance Serialise JobSpecId where
+     encode = \ x ->
+        encodeMapLen 4 >>
+        encodeRecordFields
+            [ encodeString "Id"         <> encode (jsiId         x)
+            , encodeString "Input"      <> encode (jsiInput      x)
+            , encodeString "Output"     <> encode (jsiOutput     x)
+            , encodeString "PipelineId" <> encode (jsiPipelineId x)
+            ]
+     decode (Record v) =
+        decodeMapLen >>
+        JobSpecId <$> (decodeString >> decode)
+                  <*> (decodeString >> decode)
+                  <*> (decodeString >> decode)
+                  <*> (decodeString >> decode)
+
+Note that fields are stored alphabetically ordered by field name, so
+that we are insensitive to changes in field order in the schema.
+-}
+
+gen_sr_to :: Tool (APINode, SpecRecord)
+gen_sr_to = mkTool $ \ ts (an, sr) -> do
+    x <- newName "x"
+    optionalInstanceD ts ''Serialise [nodeRepT an] [ simpleD 'encode (bdy_in an sr x)
+                                                   , simpleD 'decode (cl an sr)
+                                                   ]
+  where
+    bdy_in an sr x =
+        let fields = sortFields sr
+            len = fromIntegral (length fields)  -- to Integer
+            lenE = varE 'fromIntegral  -- to Word
+                     `appE` (sigE (litE (integerL len))
+                                  (conT ''Integer))
+            -- Micro-optimization: we use the statically known @len@ value
+            -- instead of creating a list of thunks from the argument of
+            -- @encodeRecordFields@ and dynamically calculating
+            -- it's length, long before the list is fully forced.
+            writeRecordHeader = varE 'encodeMapLen `appE` lenE
+            encFields =
+                varE 'encodeRecordFields `appE`
+                    listE [ [e| encodeString $(fieldNameE fn)
+                                <> encode ($(nodeFieldE an fn) $(varE x)) |]
+                            | (fn, _fty) <- fields ]
+        in lamE [varP x] $
+               varE '(<>)
+                 `appE` writeRecordHeader
+                 `appE` encFields
+
+    cl an sr    = varE '(>>)
+                    `appE` (varE 'decodeMapLen)  -- TODO (extra check): check len with srFields
+                    `appE` bdy
+      where
+        sorted_fields   = map fst $ sortFields sr
+        original_fields = map fst $ srFields sr
+        bdy = applicativeE dataCon $ map project sorted_fields
+        project _fn = [e| decodeString >> decode |]
+          -- TODO (correctness): check that $(fieldNameE fn) matches the decoded name
+          -- and if not, use the default value, etc.
+
+        -- If the fields are sorted, just use the data constructor,
+        -- but if not, generate a reordering function like
+        --   \ _foo_a _foo_b -> Con _foo_b _foo_a
+        dataCon | sorted_fields == original_fields = nodeConE an
+                | otherwise = lamE (map (nodeFieldP an) sorted_fields)
+                                   (foldl' appE (nodeConE an) (map (nodeFieldE an) original_fields))
+
+    sortFields sr = sortBy (comparing fst) $ srFields sr
+
+{-
+instance Serialise Foo where
+    encode (Bar x) = encodeUnion "x" x
+    encode (Baz x) = object [ "y" .= x ]
+    decode = decodeUnion [ ("x", fmap Bar . decode)
+                         , ("y", fmap Baz . decode) ]
+
+-}
+
+gen_su_to :: Tool (APINode, SpecUnion)
+gen_su_to = mkTool $ \ ts (an, su) -> optionalInstanceD ts ''Serialise [nodeRepT an]
+                                        [ funD    'encode (cls an su)
+                                        , simpleD 'decode (bdy_out an su)
+                                        ]
+  where
+    cls an su = map (cl an) (suFields su)
+
+    cl an (fn, (_ty, _)) = do
+      x <- newName "x"
+      clause [nodeAltConP an fn [varP x]] (bdy fn x) []
+
+    bdy fn x = normalB [e| encodeUnion $(fieldNameE fn) (encode $(varE x)) |]
+
+
+    bdy_out an su = varE 'decodeUnion `appE` listE (map (alt an) (suFields su))
+
+    alt an (fn, _) = [e| ( $(fieldNameE fn) , fmap $(nodeAltConE an fn) decode ) |]
+
+
+{-
+instance Serialise FrameRate where
+    encode = encodeString . _text_FrameRate
+    decode = decodeString >>= cborStrMap_p _map_FrameRate
+-}
+
+gen_se_to :: Tool (APINode, SpecEnum)
+gen_se_to = mkTool $ \ ts (an, _se) -> optionalInstanceD ts ''Serialise [nodeRepT an]
+                                         [ simpleD 'encode (bdy_in an)
+                                         , simpleD 'decode (bdy_out an)
+                                         ]
+  where
+    bdy_in an = [e| encodeString . $(varE (text_enum_nm an)) |]
+
+    bdy_out an = [e| decodeString >>= cborStrMap_p $(varE (map_enum_nm an)) |]
+
+-- In a monad, to @fail@ instead of crashing with @error@.
+cborStrMap_p :: (Monad m, Ord a) => Map.Map T.Text a -> T.Text -> m a
+cborStrMap_p mp t = case Map.lookup t mp of
+  Nothing -> fail "Unexpected enumeration key in CBOR"
+  Just r -> return r
+
+
+gen_pr :: Tool APINode
+gen_pr = mkTool $ \ ts an -> case anConvert an of
+  Nothing               -> return []
+  Just (inj_fn, prj_fn) -> optionalInstanceD ts ''Serialise [nodeT an] [ simpleD 'encode bdy_in
+                                                                       , simpleD 'decode bdy_out
+                                                                       ]
+   where
+    bdy_in  = [e| encode . $(fieldNameVarE prj_fn) |]
+    bdy_out = [e| decode >>= $(fieldNameVarE inj_fn) |]
diff --git a/src/Data/API/Tools/Combinators.hs b/src/Data/API/Tools/Combinators.hs
--- a/src/Data/API/Tools/Combinators.hs
+++ b/src/Data/API/Tools/Combinators.hs
@@ -28,6 +28,7 @@
 import           Control.Applicative
 import           Data.Monoid
 import           Language.Haskell.TH
+import           Prelude
 
 
 -- | Settings to control the behaviour of API tools.  This record may
diff --git a/src/Data/API/Tools/Datatypes.hs b/src/Data/API/Tools/Datatypes.hs
--- a/src/Data/API/Tools/Datatypes.hs
+++ b/src/Data/API/Tools/Datatypes.hs
@@ -1,6 +1,8 @@
 {-# LANGUAGE TemplateHaskell            #-}
 module Data.API.Tools.Datatypes
     ( datatypesTool
+    , datatypesTool'
+    , defaultDerivedClasses
     , type_nm
     , rep_type_nm
     , nodeT
@@ -8,12 +10,14 @@
     , nodeConE
     , nodeNewtypeConE
     , nodeFieldE
+    , nodeFieldP
     , nodeAltConE
     , nodeAltConP
     , newtypeProjectionE
     ) where
 
 import           Data.API.TH
+import           Data.API.TH.Compat
 import           Data.API.Tools.Combinators
 import           Data.API.Types
 
@@ -28,20 +32,26 @@
 import           Data.Typeable
 import           Language.Haskell.TH
 import           Text.Regex
+import           Prelude
 
 
 -- | Tool to generate datatypes and type synonyms corresponding to an API
 datatypesTool :: APITool
-datatypesTool = apiNodeTool $ apiSpecTool (mkTool     $ uncurry . gen_sn_dt)
-                                          (simpleTool $ uncurry gen_sr_dt)
-                                          (simpleTool $ uncurry gen_su_dt)
-                                          (simpleTool $ uncurry gen_se_dt)
-                                          (simpleTool $ uncurry gen_sy)
+datatypesTool = datatypesTool' defaultDerivedClasses
 
+-- | Tool to generate datatypes and type synonyms corresponding to an
+-- API, where the function specifies the derived classes for each datatype.
+datatypesTool' :: (APINode -> [Name]) -> APITool
+datatypesTool' deriv = apiNodeTool $ apiSpecTool (mkTool     (gen_sn_dt deriv))
+                                                 (simpleTool (gen_sr_dt deriv))
+                                                 (simpleTool (gen_su_dt deriv))
+                                                 (simpleTool (gen_se_dt deriv))
+                                                 (simpleTool gen_sy)
 
+
 -- | Generate a type synonym definition
-gen_sy :: APINode -> APIType -> Q [Dec]
-gen_sy as ty = return [TySynD (type_nm as) [] $ mk_type ty]
+gen_sy :: (APINode, APIType) -> Q [Dec]
+gen_sy (as, ty) = return [TySynD (type_nm as) [] $ mk_type ty]
 
 
 -- | Generate a newtype definition, like this:
@@ -57,22 +67,15 @@
 -- > mkEmailAddress :: T.Text -> Maybe EmailAddress
 -- > mkEmailAddress t = ... -- check filter
 
-gen_sn_dt :: ToolSettings -> APINode -> SpecNewtype -> Q [Dec]
-gen_sn_dt ts as sn = (nd :) <$> if smart then sc else return []
+gen_sn_dt :: (APINode -> [Name]) -> ToolSettings -> (APINode, SpecNewtype) -> Q [Dec]
+gen_sn_dt deriv ts (as, sn) = (nd :) <$> if smart then sc else return []
   where
-    nd  = NewtypeD [] nm [] c $ derive_leaf_nms ++ iss
-    c   = RecC (newtype_con_nm smart as) [(newtype_prj_nm as,NotStrict,wrapped_ty)]
+    nd  = mkNewtypeD [] nm [] c (deriv as)
+    c   = RecC (newtype_con_nm smart as) [(newtype_prj_nm as,annNotStrict,wrapped_ty)]
     wrapped_ty = mk_type $ TyBasic (snType sn)
 
     nm  = rep_type_nm as
 
-    iss = case snType sn of
-            BTstring -> [''IsString]
-            BTbinary -> []
-            BTbool   -> []
-            BTint    -> []
-            BTutc    -> []
-
     smart = newtypeSmartConstructors ts && isJust (snFilter sn)
 
     sc  = simpleSigD (newtype_smart_con_nm as) [t| $(return wrapped_ty) -> Maybe $(nodeRepT as) |] $
@@ -98,12 +101,11 @@
 -- >         }
 -- >     deriving (Show,Eq,Typeable)
 
-gen_sr_dt :: APINode -> SpecRecord -> Q [Dec]
-gen_sr_dt as sr = return [DataD [] nm [] cs derive_node_nms] -- [show_nm,eq_nm]
+gen_sr_dt :: (APINode -> [Name]) -> (APINode, SpecRecord) -> Q [Dec]
+gen_sr_dt deriv (as, sr) = return [mkDataD [] nm [] cs (deriv as)]
   where
-    cs = [RecC nm [(pref_field_nm as fnm,IsStrict,mk_type (ftType fty)) |
+    cs = [RecC nm [(pref_field_nm as fnm,annIsStrict,mk_type (ftType fty)) |
                                                 (fnm,fty)<-srFields sr]]
-
     nm = rep_type_nm as
 
 
@@ -112,12 +114,11 @@
 -- > data Foo = F_Bar Int | F_Baz Bool
 -- >     deriving (Show,Typeable)
 
-gen_su_dt :: APINode -> SpecUnion -> Q [Dec]
-gen_su_dt as su = return [DataD [] nm [] cs derive_node_nms] -- [show_nm,eq_nm]
+gen_su_dt :: (APINode -> [Name]) -> (APINode, SpecUnion) -> Q [Dec]
+gen_su_dt deriv (as, su) = return [mkDataD [] nm [] cs (deriv as)]
   where
-    cs = [NormalC (pref_con_nm as fnm) [(IsStrict,mk_type ty)] |
+    cs = [NormalC (pref_con_nm as fnm) [(annIsStrict,mk_type ty)] |
                                             (fnm,(ty,_))<-suFields su]
-
     nm = rep_type_nm as
 
 
@@ -135,11 +136,10 @@
 -- >     | FR_60
 -- >     deriving (Show,Eq,Ord,Bounded,Enum,Typeable)
 
-gen_se_dt :: APINode -> SpecEnum -> Q [Dec]
-gen_se_dt as se = return [DataD [] nm [] cs $ derive_leaf_nms ++ [''Bounded, ''Enum]]
+gen_se_dt :: (APINode -> [Name]) -> (APINode, SpecEnum) -> Q [Dec]
+gen_se_dt deriv (as, se) = return [mkDataD [] nm [] cs (deriv as)]
   where
     cs = [NormalC (pref_con_nm as fnm) [] | (fnm,_) <- seAlts se ]
-
     nm = rep_type_nm as
 
 
@@ -148,7 +148,7 @@
     case ty of
       TyList  ty'  -> AppT ListT  $ mk_type ty'
       TyMaybe ty'  -> AppT (ConT ''Maybe) $ mk_type ty'
-      TyName  nm   -> ConT  $ mkName $ _TypeName nm
+      TyName  nm   -> ConT  $ mkNameText $ _TypeName nm
       TyBasic bt   -> basic_type bt
       TyJSON       -> ConT ''Value
 
@@ -162,6 +162,21 @@
       BTutc    -> ConT ''UTCTime
 
 
+-- | Default names of classes for which to derive instances, depending
+-- on the type of API node.
+defaultDerivedClasses :: APINode -> [Name]
+defaultDerivedClasses an = case anSpec an of
+    SpNewtype sn -> case snType sn of
+                      BTstring -> ''IsString : derive_leaf_nms
+                      BTbinary -> derive_leaf_nms
+                      BTbool   -> derive_leaf_nms
+                      BTint    -> derive_leaf_nms
+                      BTutc    -> derive_leaf_nms
+    SpRecord  _  -> derive_node_nms
+    SpUnion   _  -> derive_node_nms
+    SpEnum    _  -> derive_leaf_nms ++ [''Bounded, ''Enum]
+    SpSynonym _  -> []
+
 derive_leaf_nms :: [Name]
 derive_leaf_nms = [''Show,''Eq,''Ord,''Typeable]
 
@@ -171,7 +186,7 @@
 
 -- | Name of the type corresponding to the API node, e.g. @JobId@
 type_nm :: APINode -> Name
-type_nm an = mkName $ _TypeName $ anName an
+type_nm an = mkName $ T.unpack $ _TypeName $ anName an
 
 -- | Name of the representation type corresponding to the API node,
 -- which differs from the 'type_nm' only if custom conversion
@@ -197,21 +212,21 @@
 newtype_smart_con_nm an = mkName $ "mk" ++ rep_type_s an
 
 rep_type_s :: APINode -> String
-rep_type_s an = f $ _TypeName $ anName an
+rep_type_s an = f $ T.unpack $ _TypeName $ anName an
   where
     f s = maybe s (const ("REP__"++s)) $ anConvert an
 
 -- | Construct the name of a record field by attaching the
 -- type-specific prefix, in lowercase, e.g. @_jsi_id@
 pref_field_nm :: APINode -> FieldName -> Name
-pref_field_nm as fnm = mkName $ pre ++ _FieldName fnm
+pref_field_nm as fnm = mkName $ pre ++ T.unpack (_FieldName fnm)
   where
     pre = "_" ++ map toLower (CI.original $ anPrefix as) ++ "_"
 
 -- | Construct the name of a union or enum constructor by attaching
 -- the type-specific prefix, in uppercase, e.g. @FR_auto@
 pref_con_nm :: APINode -> FieldName -> Name
-pref_con_nm as fnm = mkName $ pre ++ _FieldName fnm
+pref_con_nm as fnm = mkName $ pre ++ T.unpack (_FieldName fnm)
   where
     pre = map toUpper (CI.original $ anPrefix as) ++ "_"
 
@@ -235,6 +250,10 @@
 -- | A record field in an API node, as an expression
 nodeFieldE :: APINode -> FieldName -> ExpQ
 nodeFieldE an fnm = varE $ pref_field_nm an fnm
+
+-- | A record field in an API node, as a pattern
+nodeFieldP :: APINode -> FieldName -> PatQ
+nodeFieldP an fnm = varP $ pref_field_nm an fnm
 
 -- | A prefixed constructor for a union or enum, as an expression
 nodeAltConE :: APINode -> FieldName -> ExpQ
diff --git a/src/Data/API/Tools/DeepSeq.hs b/src/Data/API/Tools/DeepSeq.hs
--- a/src/Data/API/Tools/DeepSeq.hs
+++ b/src/Data/API/Tools/DeepSeq.hs
@@ -12,6 +12,7 @@
 import           Control.DeepSeq
 import           Data.Monoid
 import           Language.Haskell.TH
+import           Prelude
 
 
 -- | Tool to generate 'NFData' instances for generated types.
@@ -46,4 +47,6 @@
         f (fn,_) = match (nodeAltConP an fn [varP y]) (normalB [e|rnf $(varE y)|]) []
 
 gen_se :: Tool (APINode, SpecEnum)
-gen_se = mkTool $ \ ts (an, _) -> optionalInstanceD ts ''NFData [nodeRepT an] []
+gen_se = mkTool $ \ ts (an, _) ->
+    optionalInstanceD ts ''NFData [nodeRepT an]
+        [simpleD 'rnf [e| \ x -> seq x () |] ]
diff --git a/src/Data/API/Tools/Enum.hs b/src/Data/API/Tools/Enum.hs
--- a/src/Data/API/Tools/Enum.hs
+++ b/src/Data/API/Tools/Enum.hs
@@ -45,7 +45,7 @@
 -- >             FR60      -> "60"
 
 text_enum_nm :: APINode -> Name
-text_enum_nm an = mkName $ "_text_" ++ (_TypeName $ anName an)
+text_enum_nm an = mkName $ "_text_" ++ T.unpack (_TypeName $ anName an)
 
 gen_se_tx :: APINode -> SpecEnum -> Q [Dec]
 gen_se_tx as se = simpleSigD (text_enum_nm as)
@@ -59,7 +59,7 @@
 
     pt fnm = nodeAltConP as fnm []
 
-    bd fnm = normalB $ stringE $ _FieldName fnm
+    bd fnm = normalB $ stringE $ T.unpack $ _FieldName fnm
 
 
 
@@ -70,7 +70,7 @@
 -- > _map_FrameRate = genTextMap _text_FrameRate
 
 map_enum_nm :: APINode -> Name
-map_enum_nm  an = mkName $ "_map_"  ++ (_TypeName $ anName an)
+map_enum_nm  an = mkName $ "_map_"  ++ T.unpack (_TypeName $ anName an)
 
 gen_se_mp :: APINode -> Q [Dec]
 gen_se_mp as = simpleSigD (map_enum_nm as)
diff --git a/src/Data/API/Tools/Example.hs b/src/Data/API/Tools/Example.hs
--- a/src/Data/API/Tools/Example.hs
+++ b/src/Data/API/Tools/Example.hs
@@ -24,6 +24,7 @@
 import           Safe
 import           Test.QuickCheck                as QC
 import qualified Data.Text                      as T
+import           Prelude
 
 
 -- | The Example class is used to generate a documentation-friendly
@@ -79,7 +80,7 @@
     gen_sample :: APINode -> ExpQ
     gen_sample an = [e| ($str, fmap toJSON (example :: Gen $(nodeT an))) |]
       where
-        str = stringE $ _TypeName $ anName an
+        str = stringE $ T.unpack $ _TypeName $ anName an
 
 
 -- | Tool to generate 'Example' instances for types generated by
diff --git a/src/Data/API/Tools/JSON.hs b/src/Data/API/Tools/JSON.hs
--- a/src/Data/API/Tools/JSON.hs
+++ b/src/Data/API/Tools/JSON.hs
@@ -24,6 +24,7 @@
 import           Data.Monoid
 import qualified Data.Text                      as T
 import           Language.Haskell.TH
+import           Prelude
 
 
 -- | Tool to generate 'ToJSON' and 'FromJSONWithErrs' instances for
@@ -220,7 +221,7 @@
    where
     bdy = do x <- newName "x"
              lamE [varP x] [e| parseJSONWithErrs $(varE x) >>= $inj |]
-    inj = varE $ mkName $ _FieldName inj_fn
+    inj = fieldNameVarE inj_fn
 
 
 gen_pr :: Tool APINode
@@ -229,7 +230,7 @@
   Just (_, prj_fn) -> optionalInstanceD ts ''ToJSON [nodeT an] [simpleD 'toJSON bdy]
    where
     bdy = [e| toJSON . $prj |]
-    prj = varE $ mkName $ _FieldName prj_fn
+    prj = fieldNameVarE prj_fn
 
 
 -- | Generate 'FromJSON' instances like this:
@@ -260,10 +261,3 @@
 json_string_p xs p (String t) | Just val <- p t = pure val
                               | otherwise       = failWith $ UnexpectedEnumVal xs t
 json_string_p _  _ v                            = failWith $ expectedString v
-
-
-fieldNameE :: FieldName -> ExpQ
-fieldNameE = stringE . _FieldName
-
-typeNameE :: TypeName -> ExpQ
-typeNameE = stringE . _TypeName
diff --git a/src/Data/API/Tools/JSONTests.hs b/src/Data/API/Tools/JSONTests.hs
--- a/src/Data/API/Tools/JSONTests.hs
+++ b/src/Data/API/Tools/JSONTests.hs
@@ -1,44 +1,112 @@
 {-# LANGUAGE ScopedTypeVariables  #-}
 {-# LANGUAGE TemplateHaskell      #-}
 {-# LANGUAGE QuasiQuotes          #-}
+{-# LANGUAGE BangPatterns #-}
 
 -- Here we use Template Haskell to generate a test suite for the Aeson wrappers
 -- from the DSL description of same.
 
 module Data.API.Tools.JSONTests
-    ( jsonTestsTool
+    ( -- * Tools
+      jsonTestsTool
+    , cborTestsTool
+    , cborToJSONTestsTool
+    , jsonToCBORTestsTool
+    , jsonGenericValueTestsTool
+    , cborGenericValueTestsTool
+
+      -- * Properties
     , prop_decodesTo
     , prop_decodesTo'
     , prop_resultsMatchRoundtrip
+    , prop_cborRoundtrip
+    , prop_cborToJSON
+    , prop_jsonToCBOR
     ) where
 
 import           Data.API.JSON
+import           Data.API.JSONToCBOR
 import           Data.API.Tools.Combinators
 import           Data.API.Tools.Datatypes
 import           Data.API.TH
 import           Data.API.Types
+import           Data.API.Value
 
 import qualified Data.Aeson                     as JS
+import           Codec.Serialise
+import           Data.Binary.Serialise.CBOR.JSON ()
 import           Language.Haskell.TH
 import           Test.QuickCheck
+import           Test.QuickCheck.Property       as QCProperty
+import           Prelude
 
 
--- | Tool to generate a list of tests of type @[('String', 'Property')]@
--- with the given name.  This depends on 'jsonTool' and 'quickCheckTool'.
+-- | Tool to generate a list of JSON round-trip tests of type
+-- @[('String', 'Property')]@ with the given name.  This depends on
+-- 'jsonTool' and 'quickCheckTool'.
 jsonTestsTool :: Name -> APITool
-jsonTestsTool nm = simpleTool $ \ api -> simpleSigD nm [t| [(String, Property)] |] (props api)
+jsonTestsTool = testsTool 'prop_resultsMatchRoundtrip
+
+-- | Tool to generate a list of CBOR round-trip tests of type
+-- @[('String', 'Property')]@ with the given name.  This depends on
+-- 'cborTool' and 'quickCheckTool'.
+cborTestsTool :: Name -> APITool
+cborTestsTool = testsTool 'prop_cborRoundtrip
+
+-- | Tool to generate a list of tests of type @[('String', 'Property')]@
+-- based on instantiating the first argument at type @A -> Bool@ for each
+-- type @A@ in the API.  The second argument is the name of the declaration
+-- that should be produced.
+testsTool :: Name -> Name -> APITool
+testsTool prop_nm nm = simpleTool $ \ api -> simpleSigD nm [t| [(String, Property)] |] (props api)
   where
-    props api = listE $ map generateProp [ an | ThNode an <- api ]
+    props api = listE $ map (generateProp prop_nm) [ an | ThNode an <- api ]
 
 -- | For an APINode, generate a (String, Property) pair giving the
--- type name and an appropriate instance of the
--- prop_resultsMatchRoundtrip property
-generateProp :: APINode -> ExpQ
-generateProp an = [e| ($ty, property (prop_resultsMatchRoundtrip :: $(nodeT an) -> Bool)) |]
+-- type name and an appropriate instance of the property
+generateProp :: Name -> APINode -> ExpQ
+generateProp prop_nm an = [e| ($ty, property ($(varE prop_nm) :: $(nodeT an) -> Bool)) |]
   where
-    ty = stringE $ _TypeName $ anName an
+    ty = typeNameE $ anName an
 
 
+-- | Tool to generate a list of CBOR-to-JSON conversion tests of type
+-- @[('String', 'Property')]@.  The first name must be the 'API' being
+-- tested, and the second should be the name of the declaration to be
+-- produced.  This depends on 'cborTool', 'jsonTool' and 'quickCheckTool'.
+cborToJSONTestsTool :: Name -> Name -> APITool
+cborToJSONTestsTool = schemaTestsTool 'prop_cborToJSON
+
+-- | Tool to generate a list of JSON-to-CBOR conversion tests of type
+-- @[('String', 'Property')]@.  The first name must be the 'API' being
+-- tested, and the second should be the name of the declaration to be
+-- produced.  This depends on 'cborTool', 'jsonTool' and 'quickCheckTool'.
+jsonToCBORTestsTool :: Name -> Name -> APITool
+jsonToCBORTestsTool = schemaTestsTool 'prop_jsonToCBOR
+
+-- | Tool to generate a list of tests that the 'JS.Value' generic
+-- representation agrees with the type-specific JSON representation.
+jsonGenericValueTestsTool :: Name -> Name -> APITool
+jsonGenericValueTestsTool = schemaTestsTool 'prop_jsonGeneric
+
+-- | Tool to generate a list of tests that the 'Value' generic
+-- representation agrees with the type-specific CBOR representation.
+cborGenericValueTestsTool :: Name -> Name -> APITool
+cborGenericValueTestsTool = schemaTestsTool 'prop_cborGeneric
+
+-- | Tool to generate a list of tests of properties that take the API
+-- and the type name as arguments, and return a 'QCProperty.Result'.
+schemaTestsTool :: Name -> Name -> Name -> APITool
+schemaTestsTool prop_nm api_nm nm = simpleTool $ \ api -> simpleSigD nm [t| [(String, Property)] |] (props api)
+  where
+    props api = listE $ map genProp [ an | ThNode an <- api ]
+
+    genProp an = [e| ($ty, property ($(varE prop_nm) $(varE api_nm) tn :: $(nodeT an) -> QCProperty.Result)) |]
+      where
+        tn = anName an
+        ty = typeNameE $ anName an
+
+
 -- | QuickCheck property that a 'Value' decodes to an expected Haskell
 -- value, using 'fromJSONWithErrs'
 prop_decodesTo :: forall a . (Eq a, FromJSONWithErrs a)
@@ -61,3 +129,40 @@
 prop_resultsMatchRoundtrip :: forall a . (Eq a, JS.ToJSON a, FromJSONWithErrs a )
                            => a -> Bool
 prop_resultsMatchRoundtrip x = prop_decodesTo (JS.toJSON x) x
+
+-- | QuickCheck property that CBOR decoding is a left inverse for encoding
+prop_cborRoundtrip :: forall a . (Eq a, Serialise a)
+                   => a -> Bool
+prop_cborRoundtrip x = deserialise (serialise x) == x
+
+-- | QuickCheck property that 'toJSON' agrees with encoding to CBOR
+-- directly and then decoding using the schema-aware generic decoder.
+-- From this and 'prop_resultsMatchRoundtrip' it follows that
+--
+-- > fromJSONWithErrs . deserialiseJSONWithSchema . serialise == id
+prop_cborToJSON :: forall a . (Eq a, Serialise a, JS.ToJSON a)
+                   => API -> TypeName -> a -> QCProperty.Result
+prop_cborToJSON api tn x
+  | v1 == v2  = succeeded
+  | otherwise = failed { QCProperty.reason = "Post-processed: " ++ show v1
+                                        ++ "\nDirect JSON:    " ++ show v2 }
+  where
+    v1 = deserialiseJSONWithSchema api tn (serialise x)
+    v2 = JS.toJSON x
+
+-- | QuickCheck property that direct encoding to CBOR agrees with
+-- conversion to JSON followed by the schema-aware generic encoder.
+-- From this and 'prop_cborRoundtrip' it follows that
+--
+-- > deserialise . serialiseJSONWithSchema . toJSON == id
+prop_jsonToCBOR :: forall a . (Eq a, Serialise a, JS.ToJSON a)
+                => API -> TypeName -> a -> QCProperty.Result
+prop_jsonToCBOR api tn x
+  | e1 == e2  = succeeded
+  | otherwise = failed { QCProperty.reason = "Failed with JSON:      " ++ show v
+                                        ++ "\nGeneric serialisation: " ++ show e1
+                                        ++ "\nDirect serialisation:  " ++ show e2 }
+  where
+    v  = JS.toJSON x
+    e1 = serialiseJSONWithSchema api tn v
+    e2 = serialise x
diff --git a/src/Data/API/Tools/QuickCheck.hs b/src/Data/API/Tools/QuickCheck.hs
--- a/src/Data/API/Tools/QuickCheck.hs
+++ b/src/Data/API/Tools/QuickCheck.hs
@@ -18,6 +18,7 @@
 import           Language.Haskell.TH
 import           Safe
 import           Test.QuickCheck                as QC
+import           Prelude
 
 
 -- | Tool to generate 'Arbitrary' instances for generated types.
@@ -110,6 +111,7 @@
 arbitraryUTCRange (UTCRange Nothing   Nothing  ) = QC.arbitrary
 
 -- TODO: use a more arbitrary instance (quickcheck-instances?)
+-- (in particular, there are no subsecond-resolution times here)
 instance QC.Arbitrary UTCTime where
     arbitrary = QC.elements
         [ mk "2010-01-01T00:00:00Z"
@@ -119,6 +121,8 @@
         , mk "2009-11-12T20:57:54Z"
         , mk "2000-10-28T21:03:24Z"
         , mk "1965-03-10T09:23:01Z"
+        -- , mk "1965-03-10T09:23:01.001Z"
+        -- , mk "1965-03-10T09:23:01.000001Z"
         ]
       where
         mk  = fromJustNote lab . parseUTC'
diff --git a/src/Data/API/Tools/SafeCopy.hs b/src/Data/API/Tools/SafeCopy.hs
--- a/src/Data/API/Tools/SafeCopy.hs
+++ b/src/Data/API/Tools/SafeCopy.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE TemplateHaskell            #-}
-{-# OPTIONS_GHC -fno-warn-orphans       #-}
 
 module Data.API.Tools.SafeCopy
     ( safeCopyTool
@@ -7,7 +6,6 @@
 
 import           Data.API.Tools.Combinators
 import           Data.API.Tools.Datatypes
-import           Data.API.Types
 
 import           Data.SafeCopy
 
@@ -16,5 +14,3 @@
 -- present, this derives only base version instances.
 safeCopyTool :: APITool
 safeCopyTool = apiDataTypeTool $ simpleTool $ deriveSafeCopy 0 'base . rep_type_nm
-
-$(deriveSafeCopy 0 'base ''Binary)
diff --git a/src/Data/API/Tools/Traversal.hs b/src/Data/API/Tools/Traversal.hs
--- a/src/Data/API/Tools/Traversal.hs
+++ b/src/Data/API/Tools/Traversal.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE OverloadedStrings          #-}
 {-# LANGUAGE RankNTypes                 #-}
 {-# LANGUAGE TemplateHaskell            #-}
 
@@ -16,8 +17,10 @@
 import           Data.Maybe
 import           Data.Monoid
 import qualified Data.Set                       as Set
+import qualified Data.Text                      as T
 import           Data.Traversable
 import           Language.Haskell.TH
+import           Prelude
 
 
 -- | Build a traversal of the root type (first argument) that updates
@@ -53,14 +56,14 @@
 -- | @traversalName x tn@ is the name of the function that traverses
 -- @x@ values inside @tn@
 traversalName :: TypeName -> TypeName -> Name
-traversalName x tn = mkName $ "traverse" ++ _TypeName x ++ _TypeName tn
+traversalName x tn = mkNameText $ "traverse" <> _TypeName x <> _TypeName tn
 
 -- | @traversalType x an@ is the type of the function that traverses
 -- @x@ values inside @an@
 traversalType :: TypeName -> APINode -> TypeQ
 traversalType x an = [t| forall f . Applicative f => ($x' -> f $x') -> $ty -> f $ty |]
   where
-    x' = conT $ mkName $ _TypeName x
+    x' = conT $ mkNameText $ _TypeName x
     ty = nodeT an
 
 
@@ -77,7 +80,7 @@
   | tn == x   = Just [e| id |]
   | not (tn `Set.member` targets) = Nothing
   | otherwise = case Map.lookup tn napi of
-                           Nothing                -> error $ "missing API type declaration: " ++ _TypeName tn
+                           Nothing                -> error $ "missing API type declaration: " ++ T.unpack (_TypeName tn)
                            Just (NTypeSynonym ty) -> traverser' napi targets x ty
                            Just (NRecordType  _)  -> Just $ varE $ traversalName x tn
                            Just (NUnionType   _)  -> Just $ varE $ traversalName x tn
diff --git a/src/Data/API/Tutorial.hs b/src/Data/API/Tutorial.hs
--- a/src/Data/API/Tutorial.hs
+++ b/src/Data/API/Tutorial.hs
@@ -6,12 +6,18 @@
     -- * The api DSL
     -- $api
 
-    -- ** Generating types for an API
+    -- * Generating types for an API
     -- $generate
 
+    -- ** Custom representation types
+    -- $with
+
     -- * Generating tools for an API
     -- $tools
 
+    -- ** Custom API tools
+    -- $custom-tools
+
     -- * Data migration
     -- $migration
 
@@ -29,6 +35,7 @@
 import Data.API.JSON
 import Data.API.Parse
 import Data.API.Tools
+import Data.API.Tools.Combinators
 import Data.API.Types
 
 import Data.Text
@@ -128,6 +135,38 @@
 
 -}
 
+{- $with
+
+For some types, it may be desirable to use a different datatype in the
+Haskell code, rather than relying on the generated datatype.  For
+example, this allows collection types (such as sets) to be used in
+place of lists, or allows additional invariants to be enforced.  The
+JSON serialization agrees with the schema (so the difference is
+invisible to non-Haskell clients).  This is possible using a @with@
+clause in the schema DSL, which follows the type declaration and gives
+the names of a pair of conversion functions, like this:
+
+> i :: IDSet
+>     = record
+>         ids :: [ID]
+>     with inj_IDSet, prj_IDSet
+
+When a @with@ clause is used, the usual generated type (the
+representation type) will be given a @REP__@ prefix, so in this case
+'generate' will produce:
+
+> data REP__IDSet = REP__IDSet { _i_ids :: [ID] }
+
+The Haskell code accompanying the call to 'generate' should define a
+type called @IDSet@, and functions
+@inj_IDSet :: 'Monad' m => REP__IDSet -> m IDSet@ and
+@prj_IDSet :: IDSet -> REP__IDSet@, which will be used when converting
+to and from JSON.  The monadic type allows parsing to 'fail' if
+the representation type uses a value that is not permitted, but
+converting back must be a pure function.
+
+-}
+
 {- $tools
 
 Once the Haskell datatypes have been created by 'generate', additional
@@ -159,6 +198,26 @@
 
 will lead to errors about undefined symbols @_text_MyEnum@ and
 @_map_MyEnum@ in the generated code.
+
+-}
+
+{- $custom-tools
+
+An 'APITool' is essentially just a function that consumes an 'API' and
+produces some Template Haskell declarations.  More generally, a
+@'Tool' a@ consumes a value of type @a@ and generates some
+declarations.  The utilities in "Data.API.Tools.Combinators" make it
+slightly more convenient to construct such things.  In particular, you
+can use @'apiNodeTool' ('apiSpecTool' n r u e t)@ to build a tool that
+consumes an 'API' out of tools that explain what to do for newtypes,
+records, unions, enumerations and type synonyms respectively.
+
+Typically, tools generate declarations or class instances based on
+each different node in the API. These generated declarations work with
+the datatypes generated by 'datatypesTool'.  The module
+"Data.API.Tools.Datatypes" provides functions to turn 'APINode's and
+their components into Template Haskell references to the generated
+datatypes.
 
 -}
 
diff --git a/src/Data/API/Types.hs b/src/Data/API/Types.hs
--- a/src/Data/API/Types.hs
+++ b/src/Data/API/Types.hs
@@ -1,10 +1,9 @@
+{-# LANGUAGE BangPatterns               #-}
 {-# LANGUAGE RecordWildCards            #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE OverloadedStrings          #-}
 {-# LANGUAGE TemplateHaskell            #-}
-{-# OPTIONS_GHC -fno-warn-orphans       #-}
 
-
 module Data.API.Types
     ( API
     , Thing(..)
@@ -32,6 +31,7 @@
     , mkRegEx
     , inIntRange
     , inUTCRange
+    , base64ToBinary
     ) where
 
 import           Data.API.Utils
@@ -43,7 +43,9 @@
 import           Data.Aeson
 import           Data.Aeson.Types
 import           Data.Aeson.TH
+import qualified Codec.Serialise     as CBOR
 import           Data.Maybe
+import           Data.SafeCopy
 import qualified Data.Text                      as T
 import qualified Data.Text.Encoding             as T
 import qualified Data.ByteString.Char8          as B
@@ -53,6 +55,7 @@
 import           Language.Haskell.TH
 import           Language.Haskell.TH.Syntax
 import           Text.Regex
+import           Prelude
 
 
 -- | an API spec is made up of a list of type/element specs, each
@@ -63,8 +66,12 @@
 data Thing
     = ThComment MDComment
     | ThNode    APINode
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData Thing where
+  rnf (ThComment x) = rnf x
+  rnf (ThNode    x) = rnf x
+
 -- | Specifies an individual element/type of the API
 
 data APINode
@@ -75,20 +82,21 @@
         , anSpec    :: Spec             -- ^ the type specification
         , anConvert :: Conversion       -- ^ optional conversion functions
         }
-    deriving (Show)
+    deriving (Eq,Show)
 
--- | TypeName must contain a valid Haskell type constructor
+instance NFData APINode where
+  rnf (APINode a b c d e) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d `seq` rnf e
 
-newtype TypeName = TypeName { _TypeName :: String }
-    deriving (Eq, Ord,Show, IsString)
+-- | TypeName must contain a valid Haskell type constructor
+newtype TypeName = TypeName { _TypeName :: T.Text }
+    deriving (Eq, Ord, Show, NFData, IsString)
 
 -- | FieldName identifies recod fields and union alternatives
 --   must contain a valid identifier valid in Haskell and
 --   any API client wrappers (e.g., if Ruby wrappers are to be
 --   generated the names should easily map into Ruby)
-
-newtype FieldName = FieldName { _FieldName :: String }
-    deriving (Show,Eq,Ord,IsString)
+newtype FieldName = FieldName { _FieldName :: T.Text }
+    deriving (Eq, Ord, Show, NFData, IsString)
 
 -- | Markdown comments are represented by strings
 
@@ -112,8 +120,15 @@
     | SpUnion   SpecUnion
     | SpEnum    SpecEnum
     | SpSynonym APIType
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData Spec where
+  rnf (SpNewtype x) = rnf x
+  rnf (SpRecord  x) = rnf x
+  rnf (SpUnion   x) = rnf x
+  rnf (SpEnum    x) = rnf x
+  rnf (SpSynonym x) = rnf x
+
 -- | SpecNewtype elements are isomorphisms of string, inetgers or booleans
 
 data SpecNewtype =
@@ -121,14 +136,22 @@
         { snType   :: BasicType
         , snFilter :: Maybe Filter
         }
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData SpecNewtype where
+  rnf (SpecNewtype x y) = rnf x `seq` rnf y
+
 data Filter
     = FtrStrg RegEx
     | FtrIntg IntRange
     | FtrUTC  UTCRange
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData Filter where
+  rnf (FtrStrg x) = rnf x
+  rnf (FtrIntg x) = rnf x
+  rnf (FtrUTC  x) = rnf x
+
 data IntRange
     = IntRange
         { ir_lo :: Maybe Int
@@ -136,8 +159,8 @@
         }
     deriving (Eq, Show)
 
-instance Lift IntRange where
-    lift (IntRange lo hi) = [e| IntRange lo hi |]
+instance NFData IntRange where
+  rnf (IntRange x y) = rnf x `seq` rnf y
 
 inIntRange :: Int -> IntRange -> Bool
 _ `inIntRange` IntRange Nothing   Nothing   = True
@@ -152,15 +175,8 @@
         }
     deriving (Eq, Show)
 
-instance Lift UTCRange where
-    lift (UTCRange lo hi) = [e| UTCRange $(liftMaybeUTCTime lo) $(liftMaybeUTCTime hi) |]
-
-liftUTC :: UTCTime -> ExpQ
-liftUTC u = [e| fromMaybe (error "liftUTC") (parseUTC_ $(stringE (mkUTC_ u))) |]
-
-liftMaybeUTCTime :: Maybe UTCTime -> ExpQ
-liftMaybeUTCTime Nothing  = [e| Nothing |]
-liftMaybeUTCTime (Just u) = [e| Just $(liftUTC u) |]
+instance NFData UTCRange where
+  rnf (UTCRange x y) = rnf x `seq` rnf y
 
 inUTCRange :: UTCTime -> UTCRange -> Bool
 _ `inUTCRange` UTCRange Nothing   Nothing   = True
@@ -178,6 +194,9 @@
 mkRegEx :: T.Text -> RegEx
 mkRegEx txt = RegEx txt $ mkRegexWithOpts (T.unpack txt) False True
 
+instance NFData RegEx where
+  rnf (RegEx x !_) = rnf x
+
 instance ToJSON RegEx where
     toJSON RegEx{..} = String re_text
 
@@ -190,16 +209,16 @@
 instance Show RegEx where
     show = T.unpack . re_text
 
-instance Lift RegEx where
-    lift re = [e| mkRegEx $(stringE (T.unpack (re_text re))) |]
-
 -- | SpecRecord is your classsic product type.
 
 data SpecRecord = SpecRecord
     { srFields :: [(FieldName, FieldType)]
     }
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData SpecRecord where
+  rnf (SpecRecord x) = rnf x
+
 -- | In addition to the type and comment, record fields may carry a
 -- flag indicating that they are read-only, and may have a default
 -- value, which must be of a compatible type.
@@ -210,24 +229,34 @@
     , ftDefault  :: Maybe DefaultValue
     , ftComment  :: MDComment
     }
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData FieldType where
+  rnf (FieldType a b c d) = rnf a `seq` rnf b `seq` rnf c `seq` rnf d
+
 -- | SpecUnion is your classsic union type
 
 data SpecUnion = SpecUnion
     { suFields :: [(FieldName,(APIType,MDComment))]
     }
-    deriving (Show)
+    deriving (Eq,Show)
 
+instance NFData SpecUnion where
+  rnf (SpecUnion x) = rnf x
+
 -- | SpecEnum is your classic enumerated type
 
 data SpecEnum = SpecEnum
     { seAlts :: [(FieldName,MDComment)]
     }
-    deriving (Show)
+    deriving (Eq,Show)
 
--- Conversion possibly converts to an internal representation
+instance NFData SpecEnum where
+  rnf (SpecEnum x) = rnf x
 
+-- | Conversion possibly converts to an internal representation.  If
+-- specified, a conversion is a pair of an injection function name and
+-- a projection function name.
 type Conversion = Maybe (FieldName,FieldName)
 
 -- | Type is either a list, Maybe, a named element of the API or a basic type
@@ -243,6 +272,13 @@
 instance IsString APIType where
   fromString = TyName . fromString
 
+instance NFData APIType where
+  rnf (TyList  ty) = rnf ty
+  rnf (TyMaybe ty) = rnf ty
+  rnf (TyName  tn) = rnf tn
+  rnf (TyBasic bt) = rnf bt
+  rnf TyJSON       = ()
+
 -- | the basic JSON types (N.B., no floating point numbers, yet)
 data BasicType
     = BTstring -- ^ a JSON UTF-8 string
@@ -252,6 +288,9 @@
     | BTutc    -- ^ a JSON UTC string
     deriving (Eq, Show)
 
+instance NFData BasicType where
+  rnf !_ = ()
+
 -- | A default value for a field
 data DefaultValue
     = DefValList
@@ -262,13 +301,13 @@
     | DefValUtc    UTCTime
     deriving (Eq, Show)
 
-instance Lift DefaultValue where
-  lift DefValList       = [e| DefValList     |]
-  lift DefValMaybe      = [e| DefValMaybe    |]
-  lift (DefValString s) = [e| DefValString (T.pack $(lift (T.unpack s))) |]
-  lift (DefValBool   b) = [e| DefValBool b   |]
-  lift (DefValInt    i) = [e| DefValInt i    |]
-  lift (DefValUtc    u) = [e| DefValUtc $(liftUTC u) |]
+instance NFData DefaultValue where
+  rnf DefValList       = ()
+  rnf DefValMaybe      = ()
+  rnf (DefValString t) = rnf t
+  rnf (DefValBool   b) = rnf b
+  rnf (DefValInt    i) = rnf i
+  rnf (DefValUtc    u) = rnf u
 
 -- | Convert a default value to an Aeson 'Value'.  This differs from
 -- 'toJSON' as it will not round-trip with 'fromJSON': UTC default
@@ -285,7 +324,7 @@
 -- | Binary data is represented in JSON format as a base64-encoded
 -- string
 newtype Binary = Binary { _Binary :: B.ByteString }
-    deriving (Show,Eq,Ord,NFData)
+    deriving (Show,Eq,Ord,NFData,CBOR.Serialise)
 
 instance ToJSON Binary where
     toJSON = String . T.decodeLatin1 . B64.encode . _Binary
@@ -303,11 +342,15 @@
 withBinary lab f = withText lab g
   where
     g t =
-        case B64.decode $ T.encodeUtf8 t of
+        case base64ToBinary t of
           Left  _  -> typeMismatch lab (String t)
-          Right bs -> f $ Binary bs
+          Right bs -> f bs
 
+base64ToBinary :: T.Text -> Either String Binary
+base64ToBinary t = Binary <$> B64.decode (T.encodeUtf8 t)
 
+$(deriveSafeCopy 0 'base ''Binary)
+
 deriveJSON defaultOptions ''Thing
 deriveJSON defaultOptions ''APINode
 deriveJSON defaultOptions ''TypeName
@@ -325,3 +368,85 @@
 deriveJSON defaultOptions ''UTCRange
 deriveJSON defaultOptions ''BasicType
 deriveJSON defaultOptions ''CI.CI
+
+
+instance Lift Thing where
+  lift (ThComment c) = [e| ThComment c |]
+  lift (ThNode    n) = [e| ThNode    n |]
+
+instance Lift APINode where
+  lift (APINode a b c d e) = [e| APINode a b $(liftPrefix c) d e |]
+
+liftPrefix :: Prefix -> ExpQ
+liftPrefix ci = let s = CI.original ci in [e| CI.mk s |]
+
+instance Lift TypeName where
+  lift (TypeName s) = [e| TypeName $(litE (stringL (T.unpack s))) |]
+
+instance Lift FieldName where
+  lift (FieldName s) = [e| FieldName $(litE (stringL (T.unpack s))) |]
+
+instance Lift Spec where
+  lift (SpNewtype s) = [e| SpNewtype s |]
+  lift (SpRecord  s) = [e| SpRecord  s |]
+  lift (SpUnion   s) = [e| SpUnion   s |]
+  lift (SpEnum    s) = [e| SpEnum    s |]
+  lift (SpSynonym s) = [e| SpSynonym s |]
+
+instance Lift SpecNewtype where
+  lift (SpecNewtype a b) = [e| SpecNewtype a b |]
+
+instance Lift Filter where
+  lift (FtrStrg re) = [e| FtrStrg re |]
+  lift (FtrIntg ir) = [e| FtrIntg ir |]
+  lift (FtrUTC  ur) = [e| FtrUTC  ur |]
+
+instance Lift IntRange where
+    lift (IntRange lo hi) = [e| IntRange lo hi |]
+
+instance Lift UTCRange where
+    lift (UTCRange lo hi) = [e| UTCRange $(liftMaybeUTCTime lo) $(liftMaybeUTCTime hi) |]
+
+liftUTC :: UTCTime -> ExpQ
+liftUTC u = [e| fromMaybe (error "liftUTC") (parseUTC_ $(stringE (mkUTC_ u))) |]
+
+liftMaybeUTCTime :: Maybe UTCTime -> ExpQ
+liftMaybeUTCTime Nothing  = [e| Nothing |]
+liftMaybeUTCTime (Just u) = [e| Just $(liftUTC u) |]
+
+instance Lift RegEx where
+    lift re = [e| mkRegEx $(stringE (T.unpack (re_text re))) |]
+
+instance Lift SpecRecord where
+  lift (SpecRecord s) = [e| SpecRecord s |]
+
+instance Lift FieldType where
+  lift (FieldType a b c d) = [e| FieldType a b c d |]
+
+instance Lift SpecUnion where
+  lift (SpecUnion s) = [e| SpecUnion s |]
+
+instance Lift SpecEnum where
+  lift (SpecEnum s) = [e| SpecEnum s |]
+
+instance Lift APIType where
+  lift (TyList  t) = [e| TyList  t |]
+  lift (TyMaybe t) = [e| TyMaybe t |]
+  lift (TyName  t) = [e| TyName  t |]
+  lift (TyBasic t) = [e| TyBasic t |]
+  lift TyJSON      = [e| TyJSON    |]
+
+instance Lift BasicType where
+  lift BTstring = [e| BTstring |]
+  lift BTbinary = [e| BTbinary |]
+  lift BTbool   = [e| BTbool   |]
+  lift BTint    = [e| BTint    |]
+  lift BTutc    = [e| BTutc    |]
+
+instance Lift DefaultValue where
+  lift DefValList       = [e| DefValList     |]
+  lift DefValMaybe      = [e| DefValMaybe    |]
+  lift (DefValString s) = [e| DefValString (T.pack $(lift (T.unpack s))) |]
+  lift (DefValBool   b) = [e| DefValBool b   |]
+  lift (DefValInt    i) = [e| DefValInt i    |]
+  lift (DefValUtc    u) = [e| DefValUtc $(liftUTC u) |]
diff --git a/src/Data/API/Utils.hs b/src/Data/API/Utils.hs
--- a/src/Data/API/Utils.hs
+++ b/src/Data/API/Utils.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 module Data.API.Utils
     ( mkUTC
     , mkUTC'
@@ -6,15 +7,26 @@
     , parseUTC_
     , (?!)
     , (?!?)
+      -- * Utils for merging and diffing maps
+    , MergeResult(..)
+    , mergeMaps
+    , diffMaps
+    , matchMaps
     ) where
 
 import           Data.Aeson
+import           Data.Map ( Map )
+import qualified Data.Map                       as Map
 import           Data.Maybe
 import qualified Data.Text                      as T
 import           Data.Time
-import           System.Locale
 
+#if MIN_VERSION_time(1,5,0)
+#else
+import           System.Locale (defaultTimeLocale)
+#endif
 
+
 mkUTC :: UTCTime -> Value
 mkUTC = String . mkUTC'
 
@@ -53,3 +65,30 @@
 (?!?) :: Either e a -> (e -> e') -> Either e' a
 Left  e ?!? f = Left  (f e)
 Right x ?!? _ = Right x
+
+
+-------------------------------------
+-- Utils for merging and diffing maps
+--
+
+data MergeResult a b = OnlyInLeft a | InBoth a b | OnlyInRight b
+  deriving (Eq, Show)
+
+mergeMaps :: Ord k => Map k a -> Map k b -> Map k (MergeResult a b)
+mergeMaps m1 m2 = Map.unionWith (\(OnlyInLeft a) (OnlyInRight b) -> InBoth a b)
+                      (fmap OnlyInLeft m1) (fmap OnlyInRight m2)
+
+diffMaps :: (Eq a, Ord k) => Map k a -> Map k a -> Map k (MergeResult a a)
+diffMaps m1 m2 = Map.filter different $ mergeMaps m1 m2
+  where
+    different (InBoth a b) = a /= b
+    different _            = True
+
+-- | Attempts to match the keys of the maps to produce a map from keys
+-- to pairs.
+matchMaps :: Ord k => Map k a -> Map k b -> Either (k, Either a b) (Map k (a, b))
+matchMaps m1 m2 = Map.traverseWithKey win $ mergeMaps m1 m2
+  where
+    win _ (InBoth x y)    = return (x, y)
+    win k (OnlyInLeft x)  = Left (k, Left x)
+    win k (OnlyInRight x) = Left (k, Right x)
diff --git a/src/Data/API/Value.hs b/src/Data/API/Value.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/API/Value.hs
@@ -0,0 +1,532 @@
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+
+-- | This module defines a generic representation of values belonging
+-- to a schema, for use during data migration.
+module Data.API.Value
+    ( -- * Types
+      Value(..)
+    , Record
+    , Field(..)
+
+      -- * Converting to and from generic values
+    , fromDefaultValue
+    , fromJSON
+    , parseJSON
+    , encode
+    , decode
+
+      -- * Data validation
+    , matchesNormAPI
+    , expectRecord
+    , expectEnum
+    , expectUnion
+    , expectList
+    , expectMaybe
+    , lookupType
+
+      -- * Manipulating records
+    , recordToMap
+    , mapToRecord
+    , insertField
+    , renameField
+    , deleteField
+    , findField
+    , joinRecords
+
+      -- * QuickCheck test infrastructure
+    , arbitrary
+    , arbitraryOfType
+    , arbitraryJSONValue
+    , prop_jsonRoundTrip
+    , prop_jsonGeneric
+    , prop_cborRoundTrip
+    , prop_cborGeneric
+    ) where
+
+import           Data.API.Error
+import           Data.API.JSON
+import           Data.API.NormalForm
+import           Data.API.Types
+import           Data.API.Utils
+
+import           Control.Applicative
+import           Control.Monad
+import           Control.DeepSeq
+import qualified Data.Aeson                     as JS
+import qualified Codec.Serialise          as CBOR
+import qualified Codec.Serialise.Decoding as CBOR
+import qualified Codec.Serialise.Encoding as CBOR
+import           Data.Binary.Serialise.CBOR.Extra
+import qualified Codec.CBOR.FlatTerm as CBOR
+import           Data.Binary.Serialise.CBOR.JSON
+import qualified Data.HashMap.Strict            as HMap
+import           Data.List (sortBy)
+import qualified Data.Map.Strict                as Map
+import           Data.Monoid
+import           Data.Ord
+import qualified Data.Set                       as Set
+import qualified Data.Text                      as T
+import           Data.Traversable
+import           Data.Time (NominalDiffTime, UTCTime)
+import           Data.Time.Clock.POSIX (posixSecondsToUTCTime)
+import qualified Data.Vector                    as V
+import qualified Test.QuickCheck                as QC
+import qualified Test.QuickCheck.Property       as QCP
+import           Prelude
+
+
+-- | Generic representation of a data value belonging to a schema
+-- type.  This representation has the following properties:
+--
+--  * it is straightforward to convert into either CBOR or JSON;
+--
+--  * decoding CBOR or parsing JSON requires the schema, and takes
+--    advantage of it by introducing type distinctions and interning
+--    field names;
+--
+--  * decoding CBOR is relatively efficient.
+data Value = String  !T.Text
+           | UTCTime !UTCTime
+           | Bytes   !Binary
+           | Bool    !Bool
+           | Int     !Int
+           | List    ![Value]
+           | Maybe   !(Maybe Value)
+           | Union   !FieldName !Value
+           | Enum    !FieldName
+           | Record  !Record
+           | JSON    !JS.Value
+    deriving (Eq, Show)
+
+-- | A record is represented as a list of (field name, value) pairs.
+--
+-- Invariant: these are in ascending order by field name, and there
+-- are no duplicates.
+--
+-- TODO: consider if it would be worth using 'Map.Map' instead.
+type Record = [Field]
+
+data Field = Field { fieldName  :: FieldName
+                   , fieldValue :: Value
+                   }
+    deriving (Eq, Show)
+
+instance NFData Value where
+  rnf (String t)   = rnf t
+  rnf (UTCTime t)  = rnf t
+  rnf (Bytes b)    = rnf b
+  rnf (Bool b)     = rnf b
+  rnf (Int i)      = rnf i
+  rnf (List xs)    = rnf xs
+  rnf (Maybe mb)   = rnf mb
+  rnf (Union fn v) = rnf fn `seq` rnf v
+  rnf (Enum fn)    = rnf fn
+  rnf (Record xs)  = rnf xs
+  rnf (JSON v)     = rnf v
+
+instance NFData Field where
+  rnf (Field x y) = rnf x `seq` rnf y
+
+
+-- | Convert a 'DefaultValue' into a generic 'Value', failing if the
+-- type is not compatible.  This requires type information so that it
+-- can introduce type distinctions absent in 'DefaultValue', e.g. when
+-- 'DefValList' is used at type @'TyMaybe' ('TyList' t)@.
+fromDefaultValue :: NormAPI -> APIType -> DefaultValue -> Maybe Value
+fromDefaultValue api ty0 dv = case (ty0, dv) of
+    (TyList  _, DefValList)    -> pure (List [])
+    (TyMaybe _, DefValMaybe)   -> pure (Maybe Nothing)
+    (TyMaybe ty, _)            -> Maybe . Just <$> fromDefaultValue api ty dv
+    (TyBasic bt, _)            -> fromDefaultValueBasic bt dv
+    (TyJSON,    _)             -> pure (JSON (defaultValueAsJsValue dv))
+    (TyName tname, _)          -> do d <- Map.lookup tname api
+                                     case d of
+                                       NTypeSynonym ty -> fromDefaultValue api ty dv
+                                       NNewtype bt     -> fromDefaultValueBasic bt dv
+                                       NEnumType vals | DefValString s <- dv
+                                                      , FieldName s `Set.member` vals
+                                                      -> pure (Enum (FieldName s))
+                                       _ -> Nothing
+    _ -> Nothing
+
+fromDefaultValueBasic :: BasicType -> DefaultValue -> Maybe Value
+fromDefaultValueBasic bt dv = case (bt, dv) of
+    (BTstring, DefValString s) -> Just (String s)
+    (BTbinary, DefValString s) -> case base64ToBinary s of
+                                    Right b -> Just (Bytes b)
+                                    Left  _ -> Nothing
+    (BTbool, DefValBool b)     -> Just (Bool b)
+    (BTint, DefValInt i)       -> Just (Int i)
+    (BTutc, DefValUtc u)       -> Just (UTCTime u)
+    _                          -> Nothing
+
+
+
+instance JS.ToJSON Value where
+  toJSON v0 = case v0 of
+                String t       -> JS.String t
+                UTCTime t      -> JS.String (mkUTC' t)
+                Bytes b        -> JS.toJSON b
+                Bool b         -> JS.Bool b
+                Int i          -> JS.toJSON i
+                List vs        -> JS.toJSON vs
+                Maybe Nothing  -> JS.Null
+                Maybe (Just v) -> JS.toJSON v
+                Union fn v     -> JS.object [_FieldName fn JS..= v]
+                Enum fn        -> JS.String (_FieldName fn)
+                Record xs      -> JS.object $ map (\ (Field fn v) -> _FieldName fn JS..= v) xs
+                JSON js        -> js
+
+-- | Parse a generic 'Value' from a JSON 'JS.Value', given the schema
+-- and expected type.  This is not particularly optimized.  For the
+-- other direction, use 'JS.toJSON'.
+fromJSON :: NormAPI -> APIType -> JS.Value -> Either [(JSONError, Position)] (Value, [(JSONWarning, Position)])
+fromJSON api ty v = runParserWithErrsTop defaultParseFlags (parseJSON api ty v)
+
+parseJSON :: NormAPI -> APIType -> JS.Value -> ParserWithErrs Value
+parseJSON api ty0 v = case ty0 of
+    TyName tn  -> parseJSONDecl api tn (lookupTyName api tn) v
+    TyList ty  -> case v of
+                    JS.Array arr -> List <$> traverse (parseJSON api ty) (V.toList arr)
+                    _            -> failWith (expectedArray v)
+    TyMaybe ty -> case v of
+                    JS.Null -> pure (Maybe Nothing)
+                    _       -> Maybe . Just <$> parseJSON api ty v
+    TyJSON     -> pure (JSON v)
+    TyBasic bt -> parseJSONBasic bt v
+
+parseJSONBasic :: BasicType -> JS.Value -> ParserWithErrs Value
+parseJSONBasic bt = case bt of
+    BTstring -> withText   "String"  (pure . String)
+    BTbinary -> withBinary "Bytes"   (pure . Bytes)
+    BTbool   -> withBool   "Bool"    (pure . Bool)
+    BTint    -> withInt    "Int"     (pure . Int)
+    BTutc    -> withUTC    "UTCTime" (pure . UTCTime)
+
+parseJSONDecl :: NormAPI -> TypeName -> NormTypeDecl -> JS.Value -> ParserWithErrs Value
+parseJSONDecl api tn d = case d of
+    NRecordType nrt -> \ v -> case v of
+                                JS.Object hm -> Record <$> traverse (parseField hm) (Map.toList nrt)
+                                _            -> failWith (expectedObject v)
+    NUnionType  nut -> withUnion (map (\ (fn, ty) -> (_FieldName fn, fmap (Union fn) . parseJSON api ty)) (Map.toList nut))
+    NEnumType   net -> withText (T.unpack (_TypeName tn)) $ \ k ->
+                           case lookupSet (FieldName k) net of
+                             Just fn -> pure (Enum fn)
+                             Nothing -> failWith (UnexpectedEnumVal (map _FieldName (Set.toList net)) k)
+    NTypeSynonym ty -> parseJSON api ty
+    NNewtype     bt -> parseJSONBasic bt
+  where
+    parseField hm (fn, ty) = Field fn <$> withField (_FieldName fn) (parseJSON api ty) hm
+
+
+
+-- | Efficiently encode a generic 'Value' in CBOR format.
+encode :: Value -> CBOR.Encoding
+encode v0 = case v0 of
+    String t   -> CBOR.encodeString t
+    UTCTime t  -> CBOR.encode t
+    Bytes b    -> CBOR.encode b
+    Bool b     -> CBOR.encode b
+    Int i      -> CBOR.encode i
+    List vs    -> encodeListWith encode vs
+    Maybe mb_v -> encodeMaybeWith encode mb_v
+    Union fn v -> encodeUnion (_FieldName fn) (encode v)
+    Enum fn    -> CBOR.encode (_FieldName fn)
+    Record xs  -> CBOR.encodeMapLen (fromIntegral (length xs))
+                  <> encodeRecordFields (map (\ (Field fn v) -> CBOR.encode (_FieldName fn)
+                                                                    <> encode v) xs)
+    JSON js    -> encodeJSON js
+
+
+-- | Efficiently decode CBOR as a generic 'Value', given the schema
+-- and expected type.
+decode :: NormAPI -> APIType -> CBOR.Decoder s Value
+decode api ty0 = case ty0 of
+    TyName tn  -> decodeDecl api (lookupTyName api tn)
+    TyList ty  -> List  <$!> decodeListWith (decode api ty)
+    TyMaybe ty -> Maybe <$!> decodeMaybeWith (decode api ty)
+    TyJSON     -> JSON  <$!> decodeJSON
+    TyBasic bt -> decodeBasic bt
+
+decodeBasic :: BasicType -> CBOR.Decoder s Value
+decodeBasic bt = case bt of
+    BTstring -> String <$!> CBOR.decode
+    BTbinary -> Bytes  <$!> CBOR.decode
+    BTbool   -> Bool   <$!> CBOR.decode
+    BTint    -> Int    <$!> CBOR.decode
+    BTutc    -> UTCTime <$!> CBOR.decode
+
+decodeDecl :: NormAPI -> NormTypeDecl -> CBOR.Decoder s Value
+decodeDecl api d = case d of
+    NRecordType nrt -> do _ <- CBOR.decodeMapLen
+                          go [] (Map.toList nrt)
+    NUnionType  nut -> do _ <- CBOR.decodeMapLen
+                          k <- CBOR.decodeString
+                          case lookupMap (FieldName k) nut of
+                            Just (fn, ty) -> Union fn <$!> decode api ty
+                            Nothing       -> fail $ "unexpected union alternative: " ++ T.unpack k
+    NEnumType   net -> do k <- CBOR.decodeString
+                          case lookupSet (FieldName k) net of
+                            Just fn -> pure (Enum fn)
+                            Nothing -> fail $ "unexpected enum alternative: " ++ T.unpack k
+    NTypeSynonym ty -> decode api ty
+    NNewtype     bt -> decodeBasic bt
+  where
+    go xs []            = pure (Record (reverse xs))
+    go xs ((fn, ty):ys) = do _  <- CBOR.decodeString
+                             !v <- decode api ty
+                             go (Field fn v:xs) ys
+
+
+-- | Check that the value is of the given type in the schema,
+-- reporting the first error encountered if it does not conform.
+matchesNormAPI :: NormAPI -> APIType -> Value -> Position -> Either (ValueError, Position) ()
+matchesNormAPI api ty0 v0 p = case ty0 of
+    TyName tn  -> do d <- lookupType tn api ?!? (\ f -> (InvalidAPI f, p))
+                     matchesNormAPIDecl api d v0 p
+    TyList ty  -> case v0 of
+                    List vs -> mapM_ (\ (i, v) -> matchesNormAPI api ty v (InElem i : p)) (zip [0..] vs)
+                    _       -> Left (JSONError (expectedArray js_v), p)
+    TyMaybe ty -> case v0 of
+                    Maybe Nothing -> return ()
+                    Maybe (Just v) -> matchesNormAPI api ty v p
+                    _              -> Left (JSONError (Expected ExpObject "Maybe" js_v), p)
+    TyJSON     -> case v0 of
+                    JSON _ -> return ()
+                    _      -> Left (JSONError (Expected ExpObject "JSON" js_v), p)
+    TyBasic bt -> matchesNormAPIBasic bt v0 p
+  where
+    js_v = JS.toJSON v0
+
+matchesNormAPIBasic :: BasicType -> Value -> Position -> Either (ValueError, Position) ()
+matchesNormAPIBasic bt v p = case (bt, v) of
+    (BTstring, String _) -> return ()
+    (BTstring, _)        -> Left (JSONError (expectedString js_v), p)
+    (BTbinary, Bytes _)  -> return ()
+    (BTbinary, _)        -> Left (JSONError (expectedString js_v), p)
+    (BTbool, Bool _)     -> return ()
+    (BTbool, _)          -> Left (JSONError (expectedBool js_v), p)
+    (BTint, Int _)       -> return ()
+    (BTint, _)           -> Left (JSONError (expectedInt js_v), p)
+    (BTutc, UTCTime _)   -> return ()
+    (BTutc, _)           -> Left (JSONError (Expected ExpString "UTCTime" js_v), p)
+  where
+    js_v = JS.toJSON v
+
+matchesNormAPIDecl :: NormAPI -> NormTypeDecl -> Value -> Position -> Either (ValueError, Position) ()
+matchesNormAPIDecl api d v0 p = case d of
+    NRecordType nrt -> do xs <- expectRecord v0 p
+                          case compare (length xs) (Map.size nrt) of
+                            LT -> Left (JSONError MissingField, p)
+                            EQ -> mapM_ matchesNormAPIField (zip (Map.toList nrt) xs)
+                            GT -> Left (JSONError UnexpectedField, p)
+    NUnionType  nut -> do (fn, v) <- expectUnion v0 p
+                          case Map.lookup fn nut of
+                            Just ty -> matchesNormAPI api ty v (inField fn : p)
+                            Nothing -> Left (JSONError UnexpectedField, inField fn : p)
+    NEnumType   net -> do fn <- expectEnum v0 p
+                          unless (Set.member fn net) $ Left (JSONError (UnexpectedEnumVal (map _FieldName (Set.toList net)) (_FieldName fn)), p)
+    NTypeSynonym ty -> matchesNormAPI api ty v0 p
+    NNewtype     bt -> matchesNormAPIBasic bt v0 p
+  where
+    matchesNormAPIField ((fn, ty), Field fn' v)
+        | fn == fn' = matchesNormAPI api ty v (inField fn : p)
+        | otherwise = Left (JSONError (SyntaxError (unlines ["record out of order: ", show fn, show fn', show d, show v0])), p)
+
+expectRecord :: Value -> Position -> Either (ValueError, Position) Record
+expectRecord (Record xs) _ = pure xs
+expectRecord v           p = Left (JSONError (Expected ExpObject "Record" (JS.toJSON v)), p)
+
+expectEnum :: Value -> Position -> Either (ValueError, Position) FieldName
+expectEnum (Enum s) _ = pure s
+expectEnum v        p = Left (JSONError (Expected ExpString "Enum" (JS.toJSON v)), p)
+
+expectUnion :: Value -> Position -> Either (ValueError, Position) (FieldName, Value)
+expectUnion (Union fname v) _ = pure (fname, v)
+expectUnion v               p = Left (JSONError (Expected ExpObject "Union" (JS.toJSON v)), p)
+
+expectList :: Value -> Position -> Either (ValueError, Position) [Value]
+expectList (List xs) _ = pure xs
+expectList v         p = Left (JSONError (Expected ExpArray "List" (JS.toJSON v)), p)
+
+expectMaybe :: Value -> Position -> Either (ValueError, Position) (Maybe Value)
+expectMaybe (Maybe v) _ = pure v
+expectMaybe v         p = Left (JSONError (Expected ExpArray "Maybe" (JS.toJSON v)), p)
+
+lookupType :: TypeName -> NormAPI -> Either ApplyFailure NormTypeDecl
+lookupType tname api = Map.lookup tname api ?! TypeDoesNotExist tname
+
+
+-- | Given a schema, generate an arbitrary type corresponding to the
+-- schema and an arbitrary value of that type.
+arbitrary :: NormAPI -> QC.Gen (APIType, Value)
+arbitrary api = do tn <- QC.elements (Map.keys api)
+                   v  <- arbitraryOfType api (TyName tn)
+                   return (TyName tn, v)
+
+-- | Given a schema and a type, generate an arbitrary value of that
+-- type.
+arbitraryOfType :: NormAPI -> APIType -> QC.Gen Value
+arbitraryOfType api ty0 = case ty0 of
+    TyName  tn -> arbitraryOfDecl api (lookupTyName api tn)
+    TyList  ty -> List  <$> QC.listOf (arbitraryOfType api ty)
+    TyMaybe ty -> Maybe <$> QC.oneof [pure Nothing, Just <$> arbitraryOfType api ty]
+    TyJSON     -> JSON  <$> arbitraryJSONValue
+    TyBasic bt -> arbitraryOfBasicType bt
+
+arbitraryOfBasicType :: BasicType -> QC.Gen Value
+arbitraryOfBasicType bt = case bt of
+    BTstring -> String  <$> QC.arbitrary
+    BTbinary -> Bytes   <$> QC.arbitrary
+    BTbool   -> Bool    <$> QC.arbitrary
+    BTint    -> Int     <$> QC.arbitrary
+    BTutc    -> UTCTime
+                . posixSecondsToUTCTime
+                . (realToFrac :: Int -> NominalDiffTime)
+                <$> QC.arbitrary
+
+arbitraryOfDecl :: NormAPI -> NormTypeDecl -> QC.Gen Value
+arbitraryOfDecl api d = case d of
+    NRecordType nrt -> Record <$> traverse (\ (fn, ty) -> Field fn <$> arbitraryOfType api ty) (Map.toList nrt)
+    NUnionType  nut -> do (fn, ty) <- QC.elements (Map.toList nut)
+                          Union fn <$> arbitraryOfType api ty
+    NEnumType   net -> Enum <$> QC.elements (Set.toList net)
+    NTypeSynonym ty -> arbitraryOfType api ty
+    NNewtype     bt -> arbitraryOfBasicType bt
+
+-- | A reasonably varied generator for JSON 'JS.Value's.
+--
+-- Hack alert: we do not generate 'JS.Null', because Aeson fails to
+-- round-trip @'Just' 'JS.Null' :: 'Maybe' 'JS.Value'@.
+arbitraryJSONValue :: QC.Gen JS.Value
+arbitraryJSONValue =
+    QC.sized $ \ size ->
+        QC.oneof [ JS.Object . HMap.fromList <$> QC.resize (size `div` 2) (QC.listOf ((,) <$> QC.arbitrary <*> arbitraryJSONValue))
+                 , JS.Array . V.fromList <$> QC.resize (size `div` 2) (QC.listOf arbitraryJSONValue)
+                 , JS.String <$> QC.arbitrary
+                 , JS.Number . fromInteger <$> QC.arbitrary
+                 , JS.Bool <$> QC.arbitrary
+                 -- , pure JS.Null
+                 ]
+
+
+
+-- | QuickCheck property that converting a 'Value' to and from JSON
+-- gives back the original value.
+prop_jsonRoundTrip :: NormAPI -> QC.Property
+prop_jsonRoundTrip api
+  = QC.forAll (arbitrary api) $ \ (ty, v) ->
+        case fromJSON api ty (JS.toJSON v) of
+          Right (y, ws) | v /= y        -> QCP.failed { QCP.reason = "Expected " ++ show v
+                                                                       ++ " but got " ++ show y }
+                        | not (null ws) -> QCP.failed { QCP.reason = "Unexpected warnings: " ++ show ws }
+                        | otherwise     -> QCP.succeeded
+          Left err                      -> QCP.failed { QCP.reason = "Parse error: " ++ prettyJSONErrorPositions err }
+
+-- | QuickCheck property that the type-specific JSON serialisation
+-- agrees with deserialising as generic JSON and then serialising again.
+prop_jsonGeneric :: JS.ToJSON a => API -> TypeName -> a -> QCP.Result
+prop_jsonGeneric api tn x = case fromJSON napi (TyName tn) js_v of
+    Right (v, ws) | JS.toJSON v /= js_v -> QCP.failed { QCP.reason = "Expected " ++ show js_v
+                                                                       ++ " but got " ++ show (JS.toJSON v) }
+                  | not (null ws)       -> QCP.failed { QCP.reason = "Unexpected warnings: " ++ show ws }
+                  | otherwise           -> QCP.succeeded
+    Left err                            -> QCP.failed { QCP.reason = "Parse error: " ++ prettyJSONErrorPositions err }
+  where
+    napi = apiNormalForm api
+    js_v = JS.toJSON x
+
+-- | QuickCheck property that converting a 'Value' to and from CBOR
+-- gives back the original value.
+prop_cborRoundTrip :: NormAPI -> QC.Property
+prop_cborRoundTrip api
+  = QC.forAll (arbitrary api) $ \ (ty, v) ->
+       case CBOR.fromFlatTerm (decode api ty) (CBOR.toFlatTerm (encode v)) of
+         Right v' | v /= v'   -> QCP.failed { QCP.reason = "Expected " ++ show v
+                                                             ++ " but got " ++ show v' }
+                  | otherwise -> QCP.succeeded
+         Left err             -> QCP.failed { QCP.reason = "Parse error: " ++ err }
+
+-- | QuickCheck property that the type-specific CBOR serialisation
+-- agrees with deserialising as generic CBOR and then serialising again.
+prop_cborGeneric :: CBOR.Serialise a => API -> TypeName -> a -> QCP.Result
+prop_cborGeneric api tn x
+  | not (CBOR.validFlatTerm bs) = QCP.failed { QCP.reason = "Invalid CBOR: " ++ show bs }
+  | otherwise = case CBOR.fromFlatTerm (decode napi (TyName tn)) bs of
+    Right v | bs' <- CBOR.toFlatTerm (encode v)
+            , bs' /= bs -> QCP.failed { QCP.reason = "Expected " ++ show bs ++ " but got " ++ show bs' }
+            | otherwise      -> QCP.succeeded
+    Left err                 -> QCP.failed { QCP.reason = "Decode error: " ++ err }
+  where
+    napi = apiNormalForm api
+    bs = CBOR.toFlatTerm (CBOR.encode x)
+
+
+-- | Look up a type in a schema, failing with an error if it is missing.
+lookupTyName :: NormAPI -> TypeName -> NormTypeDecl
+lookupTyName api tn = case Map.lookup tn api of
+                        Just d  -> d
+                        Nothing -> error $ "lookupTyName: missing declaration for "
+                                               ++ T.unpack (_TypeName tn)
+
+-- | Look up a key in a set, returning a pointer to the set's copy of
+-- the key.  This is useful during deserialisation because it means we
+-- can share a single key, avoiding retaining deserialised copies.
+lookupSet :: Ord a => a -> Set.Set a -> Maybe a
+#if MIN_VERSION_containers(0,5,2)
+lookupSet k s = flip Set.elemAt s <$> Set.lookupIndex k s
+#else
+-- alternative implementation for containers versions without lookupIndex/elemAt
+lookupSet k s = case Set.lookupLE k s of
+                  Just k' | k == k' -> Just k'
+                  _                 -> Nothing
+#endif
+
+-- | Look up a key in a map, returning both the value and the map's
+-- copy of the key.  This is useful during deserialisation because it
+-- means we can share a single key, avoiding retaining deserialised
+-- copies.
+lookupMap :: Ord k => k -> Map.Map k a -> Maybe (k, a)
+lookupMap k m = flip Map.elemAt m <$> Map.lookupIndex k m
+
+
+recordToMap :: Record -> Map.Map FieldName Value
+recordToMap = Map.fromList . map (\ (Field fn v) -> (fn, v))
+
+mapToRecord :: Map.Map FieldName Value -> Record
+mapToRecord = map (uncurry Field) . Map.toList
+
+-- | Insert a (field, value) pair into a record, replacing the
+-- existing field if it is present and preserving the ordering
+-- invariant.
+insertField :: FieldName -> Value -> Record -> Record
+insertField fname v []                      = [Field fname v]
+insertField fname v xxs@(x@(Field fn _):xs) = case compare fname fn of
+                                                GT -> x : insertField fname v xs
+                                                EQ -> Field fname v : xs
+                                                LT -> Field fname v : xxs
+
+-- | Delete a field from a record, trivially preserving the ordering
+-- invariant.
+deleteField :: FieldName -> Record -> Record
+deleteField fname = filter ((fname /=) . fieldName)
+
+-- | Rename a field in a record, preserving the ordering invariant.
+renameField :: FieldName -> FieldName -> Record -> Record
+renameField fname fname' = sortBy (comparing fieldName) . map f
+  where
+    f x@(Field fn v) | fn == fname = Field fname' v
+                     | otherwise   = x
+
+-- | Split a record at a given field, returning the preceding fields,
+-- value and succeeding fields.  Fails if the field is absent.
+findField :: FieldName -> Record -> Maybe (Record, Value, Record)
+findField fname xs = case break ((fname ==) . fieldName) xs of
+                       (ys, (Field _ v):zs) -> Just (ys, v, zs)
+                       (_, [])              -> Nothing
+
+-- | Join together two records with a (field, value) pair in between.
+-- The ordering invariant is not checked!
+joinRecords :: Record -> FieldName -> Value -> Record -> Record
+joinRecords ys fname v zs = ys ++ Field fname v : zs
diff --git a/src/Data/Binary/Serialise/CBOR/Extra.hs b/src/Data/Binary/Serialise/CBOR/Extra.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Binary/Serialise/CBOR/Extra.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
+module Data.Binary.Serialise.CBOR.Extra
+    ( encodeListWith
+    , encodeMaybeWith
+    , encodeRecordFields
+    , encodeUnion
+    , decodeUnion
+    , decodeListWith
+    , decodeMaybeWith
+    , (<$!>)
+    ) where
+
+import           Codec.Serialise.Decoding
+import           Codec.Serialise.Encoding
+import           Data.List (foldl1')
+import           Data.Monoid
+import qualified Data.Text                      as T
+
+#if MIN_VERSION_base(4,8,0)
+import           Control.Monad ((<$!>))
+#else
+-- | Strict version of '<$>', which is available in base >= 4.8.0
+(<$!>) :: Monad m => (a -> b) -> m a -> m b
+{-# INLINE (<$!>) #-}
+f <$!> m = do
+  x <- m
+  let z = f x
+  z `seq` return z
+infixl 4 <$!>
+#endif
+
+encodeListWith :: (a -> Encoding) -> [a] -> Encoding
+encodeListWith _ [] = encodeListLen 0
+encodeListWith f xs = encodeListLenIndef
+                        <> foldr (\x r -> f x <> r) encodeBreak xs
+
+encodeMaybeWith :: (a -> Encoding) -> Maybe a -> Encoding
+encodeMaybeWith _ Nothing  = encodeListLen 0
+encodeMaybeWith f (Just x) = encodeListLen 1 <> f x
+
+-- We can assume the record has at least 1 field.
+encodeRecordFields :: [Encoding] -> Encoding
+encodeRecordFields l = foldl1' (<>) l
+
+-- | Encode an element of a union as single-element map from a field
+-- name to a value.
+encodeUnion :: T.Text -> Encoding -> Encoding
+encodeUnion t e = encodeMapLen 1 <> encodeString t <> e
+
+decodeUnion :: [(T.Text, Decoder s a)] -> Decoder s a
+decodeUnion ds = do
+    _   <- decodeMapLen -- should always be 1
+    dfn <- decodeString
+    case lookup dfn ds of
+      Nothing -> fail "Unexpected field in union in CBOR"
+      Just d -> d
+
+decodeListWith :: Decoder s a -> Decoder s [a]
+decodeListWith dec = do
+    mn <- decodeListLenOrIndef
+    case mn of
+      Nothing -> decodeSequenceLenIndef (flip (:)) [] reverse   dec
+      Just n  -> decodeSequenceLenN     (flip (:)) [] reverse n dec
+
+decodeMaybeWith :: Decoder s a -> Decoder s (Maybe a)
+decodeMaybeWith dec = do
+    n <- decodeListLen
+    case n of
+      0 -> return Nothing
+      1 -> do !x <- dec
+              return (Just x)
+      _ -> fail "unknown tag"
diff --git a/src/Data/Binary/Serialise/CBOR/JSON.hs b/src/Data/Binary/Serialise/CBOR/JSON.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Binary/Serialise/CBOR/JSON.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE BangPatterns #-}
+module Data.Binary.Serialise.CBOR.JSON (
+    cborToJson,
+    jsonToCbor,
+    encodeJSON,
+    decodeJSON,
+  ) where
+
+import qualified Data.Aeson          as JSON
+import qualified Data.Scientific     as Scientific
+import qualified Data.Vector         as Vec
+import qualified Data.HashMap.Strict as HashMap
+
+import           Data.Text (Text)
+import qualified Data.Text                       as Text
+import qualified Data.Text.Encoding              as Text
+import qualified Data.Text.Lazy                  as Text.Lazy
+import           Data.ByteString (ByteString)
+import qualified Data.ByteString.Lazy            as LBS
+import qualified Data.ByteString.Base64          as Base64
+-- import qualified Data.ByteString.Base64.URL      as Base64url
+import qualified Data.ByteString.Base16          as Base16
+
+import Codec.Serialise.Decoding
+import Codec.Serialise.Encoding
+import Codec.CBOR.Term as CBOR
+import Codec.Serialise
+
+import Control.Applicative
+import Prelude
+
+
+instance Serialise JSON.Value where
+  encode = encodeJSON
+  decode = decodeJSON
+
+encodeJSON :: JSON.Value -> Encoding
+encodeJSON = encode . jsonToCbor
+
+decodeJSON :: Decoder s JSON.Value
+decodeJSON = cborToJson <$> decode
+
+-- Most of the types in CBOR have direct analogs in JSON.  However, some
+-- do not, and someone implementing a CBOR-to-JSON converter has to
+-- consider what to do in those cases.  The following non-normative
+-- advice deals with these by converting them to a single substitute
+-- value, such as a JSON null.
+
+cborToJson :: CBOR.Term -> JSON.Value
+
+-- o  An integer (major type 0 or 1) becomes a JSON number.
+
+-- We modify this advice by only converting numbers in the range -2^53 .. 2^53
+-- and otherwise handling them like big nums
+
+cborToJson (CBOR.TInt n) = cborToJson (CBOR.TInteger (fromIntegral n))
+
+-- o  A byte string (major type 2) that is not embedded in a tag that
+--    specifies a proposed encoding is encoded in base64url without
+--    padding and becomes a JSON string.
+
+cborToJson (CBOR.TBytes  bs) = JSON.String (base64url bs)
+cborToJson (CBOR.TBytesI bs) = JSON.String (base64url (LBS.toStrict bs))
+
+-- o  A UTF-8 string (major type 3) becomes a JSON string.  Note that
+--    JSON requires escaping certain characters (RFC 4627, Section 2.5):
+--    quotation mark (U+0022), reverse solidus (U+005C), and the "C0
+--    control characters" (U+0000 through U+001F).  All other characters
+--    are copied unchanged into the JSON UTF-8 string.
+
+cborToJson (CBOR.TString  s) = JSON.String s -- aeson will escape correctly
+cborToJson (CBOR.TStringI s) = JSON.String (Text.Lazy.toStrict s)
+
+-- o  An array (major type 4) becomes a JSON array.
+
+cborToJson (TList  vs) = JSON.Array (Vec.fromList (map cborToJson vs))
+
+-- o  A map (major type 5) becomes a JSON object.  This is possible
+--    directly only if all keys are UTF-8 strings.  A converter might
+--    also convert other keys into UTF-8 strings (such as by converting
+--    integers into strings containing their decimal representation);
+--    however, doing so introduces a danger of key collision.
+
+cborToJson (TMap  kvs) = JSON.object [ (cborToJsonString k, cborToJson v)
+                                     | (k, v) <- kvs ]
+
+-- o  False (major type 7, additional information 20) becomes a JSON false.
+
+-- o  True (major type 7, additional information 21) becomes a JSON true.
+--
+-- o  Null (major type 7, additional information 22) becomes a JSON null.
+
+cborToJson (TBool b) = JSON.Bool b
+cborToJson  TNull    = JSON.Null
+
+-- o  A floating-point value (major type 7, additional information 25
+--    through 27) becomes a JSON number if it is finite (that is, it can
+--    be represented in a JSON number); if the value is non-finite (NaN,
+--    or positive or negative Infinity), it is represented by the
+--    substitute value.
+
+cborToJson (THalf f)
+  | isNaN f || isInfinite f = JSON.Null
+  | otherwise               = JSON.Number (Scientific.fromFloatDigits f)
+cborToJson (TFloat f)
+  | isNaN f || isInfinite f = JSON.Null
+  | otherwise               = JSON.Number (Scientific.fromFloatDigits f)
+cborToJson (TDouble f)
+  | isNaN f || isInfinite f = JSON.Null
+  | otherwise               = JSON.Number (Scientific.fromFloatDigits f)
+
+-- o  Any other simple value (major type 7, any additional information
+--    value not yet discussed) is represented by the substitute value.
+
+cborToJson (TSimple _) = JSON.Null
+
+-- o  A bignum (major type 6, tag value 2 or 3) is represented by
+--    encoding its byte string in base64url without padding and becomes
+--    a JSON string.  For tag value 3 (negative bignum), a "~" (ASCII
+--    tilde) is inserted before the base-encoded value.  (The conversion
+--    to a binary blob instead of a number is to prevent a likely
+--    numeric overflow for the JSON decoder.)
+
+-- NOTE We ignore this advice and just use 'JSON.Number'.
+
+cborToJson (TInteger n) = JSON.Number (fromInteger n)
+
+-- o  A byte string with an encoding hint (major type 6, tag value 21
+--    through 23) is encoded as described and becomes a JSON string.
+
+cborToJson (TTagged 21 (CBOR.TBytes bs)) = JSON.String (base64url bs)
+cborToJson (TTagged 22 (CBOR.TBytes bs)) = JSON.String (base64 bs)
+cborToJson (TTagged 23 (CBOR.TBytes bs)) = JSON.String (base16 bs)
+
+--   o  For all other tags (major type 6, any other tag value), the
+--      embedded CBOR item is represented as a JSON value; the tag value
+--      is ignored.
+
+cborToJson (TTagged _tag term) = cborToJson term
+
+-- o  Indefinite-length items are made definite before conversion.
+
+cborToJson (TListI kvs) = cborToJson (TList kvs)
+cborToJson (TMapI  kvs) = cborToJson (TMap kvs)
+
+
+-- used just for converting CBOR terms to JSON map keys
+-- TODO: partial
+cborToJsonString :: CBOR.Term -> Text.Text
+cborToJsonString (TInt     n) = Text.pack (show n)
+cborToJsonString (TInteger n) = Text.pack (show n)
+cborToJsonString (TString  s) = s
+cborToJsonString (TStringI s) = Text.Lazy.toStrict s
+
+cborToJsonString (TBytes  bs) = base64url bs
+cborToJsonString (TBytesI bs) = base64url (LBS.toStrict bs)
+
+-- TODO not strictly following the spec - this uses padding, spec says
+-- we shouldn't
+-- TODO moreover, api-tools uses base64 rather than base64url!
+base64url :: ByteString -> Text
+base64url = base64 -- Text.decodeLatin1 . Base64url.encode
+
+base64 :: ByteString -> Text
+base64 = Text.decodeLatin1 . Base64.encode
+
+base16 :: ByteString -> Text
+base16 = Text.decodeLatin1 . Base16.encode
+
+
+jsonToCbor :: JSON.Value -> CBOR.Term
+jsonToCbor (JSON.Object kvs) = CBOR.TMap [ (CBOR.TString k, jsonToCbor v)
+                                         | (k, v) <- HashMap.toList kvs ]
+jsonToCbor (JSON.Array  vs)  = CBOR.TList [ jsonToCbor v | v <- Vec.toList vs ]
+jsonToCbor (JSON.String str) = CBOR.TString str
+jsonToCbor (JSON.Number n)   = case Scientific.floatingOrInteger n of
+                                 Left  d -> CBOR.TDouble d
+                                 Right i
+                                   | i >= fromIntegral (minBound :: Int) &&
+                                     i <= fromIntegral (maxBound :: Int)
+                                               -> CBOR.TInt (fromIntegral i)
+                                   | otherwise -> CBOR.TInteger i
+jsonToCbor (JSON.Bool   b)   = CBOR.TBool b
+jsonToCbor  JSON.Null        = CBOR.TNull
diff --git a/tests/Data/API/Test/DSL.hs b/tests/Data/API/Test/DSL.hs
--- a/tests/Data/API/Test/DSL.hs
+++ b/tests/Data/API/Test/DSL.hs
@@ -52,8 +52,12 @@
     // A simple test example
     = record
         x :: integer
-        y :: Foo
+        y :: Faa
 
+faa :: Faa
+    = record
+        f :: Flag
+
 c :: Coord
     // A simple test example
     = record
@@ -86,7 +90,7 @@
 uv :: MyUTC
     = utc
 
-urec :: URec
+urec :: URecord
     = record
         foo :: utc
 
@@ -99,4 +103,25 @@
 
 fu :: FilteredUTC
     = basic utc | >= 2014-10-13T15:20:11Z
+
+bb :: BasicBinary
+    = basic binary
+
+j :: JSON
+    = json
+
+nr :: NewRec
+    = record
+        bb :: BasicBinary
+        j  :: JSON
+        k  :: ? MaybeThing
+
+mt :: MaybeThing
+    = record
+        thing :: ? JSON
+
+nu :: NewUnion
+    = union
+      | bb :: BasicBinary
+      | j  :: JSON
 |]
diff --git a/tests/Data/API/Test/Gen.hs b/tests/Data/API/Test/Gen.hs
--- a/tests/Data/API/Test/Gen.hs
+++ b/tests/Data/API/Test/Gen.hs
@@ -1,32 +1,49 @@
+{-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE OverloadedStrings          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE DeriveDataTypeable         #-}
+{-# OPTIONS_GHC -fno-warn-orphans       #-}
 
 module Data.API.Test.Gen where
 
-import           Data.API.JSON
 import           Data.API.Test.DSL hiding (example)
 import qualified Data.API.Test.DSL as DSL
 import           Data.API.Tools
+import           Data.API.Tools.Datatypes
 import           Data.API.Tools.Example
+import           Data.API.Value ( arbitraryJSONValue )
+
 import           Control.Applicative
+import qualified Data.Aeson                     as JS
+import           Data.SafeCopy
+import           GHC.Generics
 import           Language.Haskell.TH
 import           Test.QuickCheck                ( Arbitrary(..) )
+import           Prelude
 
+
 $(generate         DSL.example)
 $(generateAPITools DSL.example
                    [ enumTool
                    , jsonTool'
+                   , cborTool
                    , quickCheckTool
                    , lensTool
                    , safeCopyTool
                    , exampleTool
+                   , deepSeqTool
                    , samplesTool   (mkName "exampleSamples")
-                   , jsonTestsTool (mkName "exampleSimpleTests")
+                   , jsonTestsTool (mkName "exampleTestsJSON")
+                   , cborTestsTool (mkName "exampleTestsCBOR")
+                   , cborToJSONTestsTool 'DSL.example (mkName "exampleTestsCBORToJSON")
+                   , jsonToCBORTestsTool 'DSL.example (mkName "exampleTestsJSONToCBOR")
+                   , jsonGenericValueTestsTool 'DSL.example (mkName "exampleJSONGenericValueTests")
+                   , cborGenericValueTestsTool 'DSL.example (mkName "exampleCBORGenericValueTests")
                    ])
 
-$(generateWith (defaultToolSettings { newtypeSmartConstructors = True }) example2)
+$(generateAPIToolsWith (defaultToolSettings { newtypeSmartConstructors = True }) example2
+                       [ datatypesTool' ((''Generic :) . defaultDerivedClasses) ])
 
 data Coord = Coord Int Int
     deriving (Eq,Show)
@@ -36,13 +53,12 @@
 
 instance Example Coord
 
-inj_coord :: REP__Coord -> ParserWithErrs Coord
+inj_coord :: Applicative p => REP__Coord -> p Coord
 inj_coord (REP__Coord x y) = pure $ Coord x y
 
-prj_coord :: Coord -> REP__Coord 
+prj_coord :: Coord -> REP__Coord
 prj_coord (Coord x y) = REP__Coord x y
 
-
 newtype Ssn = Ssn { _Ssn :: Integer }
     deriving(Eq,Show)
 
@@ -51,7 +67,7 @@
 
 instance Example Ssn
 
-inj_ssn :: REP__Ssn -> ParserWithErrs Ssn
+inj_ssn :: Monad m => REP__Ssn -> m Ssn
 inj_ssn = return . Ssn . fromIntegral . _REP__Ssn
 
 prj_ssn :: Ssn -> REP__Ssn
@@ -66,9 +82,9 @@
 
 instance Example CHOICE
 
-inj_chc :: REP__CHOICE -> ParserWithErrs CHOICE
+inj_chc :: Monad m => REP__CHOICE -> m CHOICE
 inj_chc (CHC_a i) = return $ CHOICE i
-inj_chc (CHC_b _) = empty
+inj_chc (CHC_b _) = fail "no choice"
 
 prj_chc :: CHOICE -> REP__CHOICE
 prj_chc (CHOICE i) = CHC_a i
@@ -81,7 +97,7 @@
 
 instance Example ENUM
 
-inj_enum :: REP__ENUM -> ParserWithErrs ENUM
+inj_enum :: Monad m => REP__ENUM -> m ENUM
 inj_enum ENM_e1 = return $ ENUM False
 inj_enum ENM_e2 = return $ ENUM True
 
@@ -95,13 +111,31 @@
 
 instance Example FilteredString
 
+
+-- | These instances are required by the generated code, but we don't
+-- really want to force them on clients of the library, so just define
+-- orphans here.
+instance Arbitrary JS.Value where
+    arbitrary = arbitraryJSONValue
+
+instance SafeCopy JS.Value where
+  getCopy = error "Not implemented"
+  putCopy = error "Not implemented"
+
 $(generateAPIToolsWith (defaultToolSettings { newtypeSmartConstructors = True }) example2
                    [ enumTool
                    , jsonTool'
+                   , cborTool
                    , quickCheckTool
                    , lensTool
                    , safeCopyTool
                    , exampleTool
+                   , deepSeqTool
                    , samplesTool   (mkName "example2Samples")
-                   , jsonTestsTool (mkName "example2SimpleTests")
+                   , jsonTestsTool (mkName "example2TestsJSON")
+                   , cborTestsTool (mkName "example2TestsCBOR")
+                   , cborToJSONTestsTool 'example2 (mkName "example2TestsCBORToJSON")
+                   , jsonToCBORTestsTool 'example2 (mkName "example2TestsJSONToCBOR")
+                   , jsonGenericValueTestsTool 'example2 (mkName "example2JSONGenericValueTests")
+                   , cborGenericValueTestsTool 'example2 (mkName "example2CBORGenericValueTests")
                    ])
diff --git a/tests/Data/API/Test/JSON.hs b/tests/Data/API/Test/JSON.hs
--- a/tests/Data/API/Test/JSON.hs
+++ b/tests/Data/API/Test/JSON.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE OverloadedStrings          #-}
 {-# LANGUAGE TemplateHaskell            #-}
 {-# LANGUAGE DeriveDataTypeable         #-}
@@ -6,14 +7,17 @@
     ( jsonTests
     ) where
 
-import           Data.API.API.Gen ( apiAPISimpleTests )
+import           Data.API.API.Gen ( apiAPITestsJSON, apiAPITestsCBOR, apiAPITestsCBORToJSON, apiAPITestsJSONToCBOR )
 import           Data.API.JSON
+import           Data.API.NormalForm
 import           Data.API.Tools
 import           Data.API.Tools.JSONTests
+import           Data.API.Test.DSL
 import           Data.API.Test.Gen hiding ( Foo )
 import           Data.API.Test.MigrationData
 import           Data.API.Types
 import           Data.API.Utils
+import qualified Data.API.Value           as Value
 
 import qualified Data.Aeson               as JS
 import qualified Data.HashMap.Strict      as HMap
@@ -39,6 +43,8 @@
                                , help (JS.String "0")   (0 :: Int)  True
                                , help (JS.String "-9")  (-9 :: Int) True
                                , help (JS.String "1a")  (1 :: Int)  False
+                               , help (JS.Number 1.1)   (1 :: Int)  True
+                               , help (JS.Number 1.9)   (1 :: Int)  True
                                , help (JS.Number 0)     False       True
                                , help (JS.Number 1)     True        True
                                , help (JS.Number 2)     True        False
@@ -62,7 +68,11 @@
 -- | Test that the correct errors are generated for bad JSON data
 errorDecoding :: [TestTree]
 errorDecoding = [ help "not enough input" ""         (proxy :: Int)
+#if MIN_VERSION_aeson(0,10,0)
+                      [(SyntaxError "Error in $: not enough input", [])]
+#else
                       [(SyntaxError "not enough input", [])]
+#endif
                 , help "object for int"   "{}"       (proxy :: Int)
                       [(Expected ExpInt "Int" (JS.Object HMap.empty), [])]
                 , help "missing alt"      "{}"       (proxy :: AUnion)
@@ -113,8 +123,34 @@
   , testGroup "Decoding invalid data" errorDecoding
   , testGroup "Smart constructors"    smartConstructors
   , testGroup "Round-trip tests"
-      [ testGroup "example"  $ map (uncurry QC.testProperty) exampleSimpleTests
-      , testGroup "example2" $ map (uncurry QC.testProperty) example2SimpleTests
-      , testGroup "api"      $ map (uncurry QC.testProperty) apiAPISimpleTests
+      [ testGroup "example JSON"   $ map (uncurry QC.testProperty) exampleTestsJSON
+      , testGroup "example CBOR"   $ map (uncurry QC.testProperty) exampleTestsCBOR
+      , testGroup "example CBOR to JSON" $ map (uncurry QC.testProperty) exampleTestsCBORToJSON
+      , testGroup "example JSON to CBOR" $ map (uncurry QC.testProperty) exampleTestsJSONToCBOR
+      , testGroup "example2 JSON"  $ map (uncurry QC.testProperty) example2TestsCBOR
+      , testGroup "example2 CBOR"  $ map (uncurry QC.testProperty) example2TestsCBOR
+      , testGroup "example2 CBOR to JSON" $ map (uncurry QC.testProperty) example2TestsCBORToJSON
+      , testGroup "example2 JSON to CBOR" $ map (uncurry QC.testProperty) example2TestsJSONToCBOR
+      , testGroup "api JSON"       $ map (uncurry QC.testProperty) apiAPITestsJSON
+      , testGroup "api CBOR"       $ map (uncurry QC.testProperty) apiAPITestsCBOR
+      , testGroup "api CBOR to JSON" $ map (uncurry QC.testProperty) apiAPITestsCBORToJSON
+      , testGroup "api JSON to CBOR" $ map (uncurry QC.testProperty) apiAPITestsJSONToCBOR
+      , QC.testProperty "Aeson Value to CBOR" (prop_cborRoundtrip :: JS.Value -> Bool)
       ]
+  , testGroup "Generic values"
+    [ QC.testProperty "example JSON round-trip" (Value.prop_jsonRoundTrip exampleNF)
+    , QC.testProperty "example2 JSON round-trip" (Value.prop_jsonRoundTrip example2NF)
+    , QC.testProperty "example CBOR round-trip" (Value.prop_cborRoundTrip exampleNF)
+    , QC.testProperty "example2 CBOR round-trip" (Value.prop_cborRoundTrip example2NF)
+    , testGroup "example agreement with ToJSON" $ map (uncurry QC.testProperty) exampleJSONGenericValueTests
+    , testGroup "example2 agreement with ToJSON" $ map (uncurry QC.testProperty) example2JSONGenericValueTests
+    , testGroup "example agreement with Serialise" $ map (uncurry QC.testProperty) exampleCBORGenericValueTests
+    , testGroup "example2 agreement with Serialise" $ map (uncurry QC.testProperty) example2CBORGenericValueTests
+    ]
   ]
+
+exampleNF :: NormAPI
+exampleNF = apiNormalForm example
+
+example2NF :: NormAPI
+example2NF = apiNormalForm example2
diff --git a/tests/Data/API/Test/Main.hs b/tests/Data/API/Test/Main.hs
--- a/tests/Data/API/Test/Main.hs
+++ b/tests/Data/API/Test/Main.hs
@@ -2,10 +2,13 @@
     ( main
     ) where
 
+import           Data.API.API
+import           Data.API.API.Gen
 import           Data.API.Test.JSON
 import           Data.API.Test.Migration
 
 import           Test.Tasty
+import           Test.Tasty.QuickCheck
 
 main :: IO ()
 main = defaultMain tests
@@ -13,4 +16,14 @@
 tests :: TestTree
 tests = testGroup "api-tools" [ migrationTests
                               , jsonTests
+                              , testProperty "Convert/unconvert" convertUncovertTest
                               ]
+
+-- | Test that converting an 'API' into a self-hosted 'APISpec' and
+-- back does not change it.  We have 'Arbitrary' instances only for
+-- 'APISpec', but we compare 'API' because it is slightly more precise
+-- (e.g. 'APISpec' contains bogus read-only fields for unions).
+convertUncovertTest :: APISpec -> Bool
+convertUncovertTest api = unconvertAPI (convertAPI unconverted_api) == unconverted_api
+  where
+    unconverted_api = unconvertAPI api
diff --git a/tests/Data/API/Test/Migration.hs b/tests/Data/API/Test/Migration.hs
--- a/tests/Data/API/Test/Migration.hs
+++ b/tests/Data/API/Test/Migration.hs
@@ -14,15 +14,19 @@
 import           Data.API.Test.MigrationData
 import           Data.API.Types
 import           Data.API.Utils
+import qualified Data.API.Value           as Value
 
 import qualified Data.Aeson               as JS
 import qualified Data.Aeson.Encode.Pretty as JS
+import qualified Codec.Serialise as CBOR
+import qualified Codec.CBOR.FlatTerm as CBOR
 import qualified Data.ByteString.Char8    as B
 import qualified Data.ByteString.Base64   as B64
 import qualified Data.ByteString.Lazy.Char8 as BL
 import qualified Data.HashMap.Strict      as HMap
 import qualified Data.Map                 as Map
 import qualified Data.Text                as T
+import qualified Data.Text.Encoding       as TE
 import           Data.Version
 import           Test.Tasty               as Test
 import           Test.Tasty.HUnit
@@ -42,6 +46,16 @@
     recur <- HMap.lookup "recur" x ?! CustomMigrationError "missing recur" (JS.Object x)
     return $ HMap.insert "recur2" recur x
 
+testDatabaseMigration' :: TestDatabaseMigration -> Value.Record -> Either ValueError Value.Record
+testDatabaseMigration' DuplicateBar r = do
+    let x = Value.recordToMap r
+    bar <- Map.lookup "bar" x ?! CustomMigrationError "missing bar" JS.Null
+    return $ Value.mapToRecord $ Map.insert "bar2" bar x
+testDatabaseMigration' DuplicateRecursive r = do
+    let x = Value.recordToMap r
+    recur <- Map.lookup "recur" x ?! CustomMigrationError "missing recur" JS.Null
+    return $ Value.mapToRecord $ Map.insert "recur2" recur x
+
 testDatabaseMigrationSchema :: TestDatabaseMigration -> NormAPI -> Either ApplyFailure (Maybe NormAPI)
 testDatabaseMigrationSchema DuplicateBar _ = Right Nothing
 testDatabaseMigrationSchema DuplicateRecursive napi =
@@ -67,6 +81,21 @@
     new <- HMap.lookup "new" x ?! CustomMigrationError "missing new" (JS.Object x)
     return $ HMap.insert "newnew" new x
 
+testRecordMigration' :: TestRecordMigration -> Value.Value -> Either ValueError Value.Value
+testRecordMigration' CopyIDtoC = mkRecordMigration' $ \ rec -> do
+    let x = Value.recordToMap rec
+    i <- Map.lookup "id" x ?! CustomMigrationError "missing id" JS.Null
+    b <- Map.lookup "c" x  ?! CustomMigrationError "missing b" JS.Null
+    r <- case (i, b) of
+        (Value.Int j, Value.String t)
+            -> return $ Value.String $ t `T.append` T.pack (show j)
+        _   -> Left $ CustomMigrationError "bad data" JS.Null
+    return $ Value.mapToRecord $ Map.insert "c" r x
+testRecordMigration' DuplicateNew = mkRecordMigration' $ \ rec -> do
+    let x = Value.recordToMap rec
+    new <- Map.lookup "new" x ?! CustomMigrationError "missing new" JS.Null
+    return $ Value.mapToRecord $ Map.insert "newnew" new x
+
 testRecordMigrationSchema :: TestRecordMigration -> NormTypeDecl -> Either ApplyFailure (Maybe NormTypeDecl)
 testRecordMigrationSchema CopyIDtoC    = noSchemaChanges
 testRecordMigrationSchema DuplicateNew = mkRecordMigrationSchema "Recursive" $ \ r ->
@@ -81,15 +110,26 @@
         Right x -> return (JS.String (T.pack (B.unpack x)))
 testFieldMigration ConvertBinaryToString v = Left $ CustomMigrationError "bad data" v
 
+testFieldMigration' :: TestFieldMigration -> Value.Value -> Either ValueError Value.Value
+testFieldMigration' ConvertBinaryToString (Value.Bytes bs) = return (Value.String (TE.decodeUtf8 (_Binary bs)))
+testFieldMigration' ConvertBinaryToString v = Left $ CustomMigrationError "bad data" (JS.toJSON v)
 
-testMigration :: CustomMigrations TestDatabaseMigration TestRecordMigration TestFieldMigration
+
+testMigration :: CustomMigrations JS.Object JS.Value TestDatabaseMigration TestRecordMigration TestFieldMigration
 testMigration = CustomMigrations testDatabaseMigration
                                  testDatabaseMigrationSchema
                                  testRecordMigration
                                  testRecordMigrationSchema
                                  testFieldMigration
 
+testMigration' :: CustomMigrations Value.Record Value.Value TestDatabaseMigration TestRecordMigration TestFieldMigration
+testMigration' = CustomMigrations testDatabaseMigration'
+                                  testDatabaseMigrationSchema
+                                  testRecordMigration'
+                                  testRecordMigrationSchema
+                                  testFieldMigration'
 
+
 assertMatchesAPI :: String -> API -> JS.Value -> Assertion
 assertMatchesAPI x a v = case dataMatchesAPI root_ a v of
     Right () -> return ()
@@ -135,6 +175,7 @@
 $(generateAPITools startSchema
                    [ enumTool
                    , jsonTool'
+                   , cborTool
                    , quickCheckTool
                    ])
 
@@ -151,11 +192,29 @@
   where
     failedBecause e = failed { reason = e }
 
+validMigrationProperty' :: DatabaseSnapshot -> P.Result
+validMigrationProperty' db =
+    case migrateDataDump' (startSchema, startVersion) (endSchema, DevVersion)
+                         changelog testMigration' root_ CheckStartAndEnd db_generic of
+    Right (v, []) -> case dataMatchesAPI root_ endSchema (JS.toJSON v) of
+        Right _   -> succeeded
+        Left  err -> failedBecause ("end data does not match API: "
+                                    ++ prettyValueErrorPosition err)
+    Right (_, ws) -> failedBecause ("migration generated warnings: " ++ show ws)
+    Left err      -> failedBecause ("migration failed: " ++ prettyMigrateFailure err)
+  where
+    failedBecause e = failed { reason = e }
 
+    db_generic = case CBOR.fromFlatTerm (Value.decode (apiNormalForm startSchema) (TyName root_))
+                                        (CBOR.toFlatTerm (CBOR.encode db)) of
+                   Right v  -> v
+                   Left err -> error err
+
 migrationTests :: TestTree
 migrationTests = testGroup "Migration"
   [ testCase     "Basic migration using sample changelog" basicMigrationTest
   , testGroup    "Invalid changes"    $ map applyFailureTest   expectedApplyFailures
   , testGroup    "Invalid migrations" $ map migrateFailureTest expectedMigrateFailures
-  , QC.testProperty "Valid migrations" validMigrationProperty
+  , QC.testProperty "Valid migrations (JSON)" validMigrationProperty
+  , QC.testProperty "Valid migrations (generic)" validMigrationProperty'
   ]
