diff --git a/ethereum-analyzer.cabal b/ethereum-analyzer.cabal
--- a/ethereum-analyzer.cabal
+++ b/ethereum-analyzer.cabal
@@ -1,5 +1,5 @@
 name:                ethereum-analyzer
-version:             1.0.3
+version:             1.2.0
 synopsis:            A Ethereum contract analyzer.
 homepage:            https://github.com/ethereumK/ethereum-analyzer
 license:             Apache-2.0
@@ -21,7 +21,7 @@
 source-repository this
   type:     git
   location: https://github.com/zchn/ethereum-analyzer
-  tag:      v1.0.3
+  tag:      v1.2.0
   subdir:   ethereum-analyzer
 
 library
diff --git a/src/Ethereum/Analyzer.hs b/src/Ethereum/Analyzer.hs
--- a/src/Ethereum/Analyzer.hs
+++ b/src/Ethereum/Analyzer.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE OverloadedStrings, FlexibleContexts #-}
 
 module Ethereum.Analyzer
-  ( decompile
-  , decompileHexString
-  , module Ethereum.Analyzer.Decompile
+  ( module Ethereum.Analyzer.Decompile
   , module Ethereum.Analyzer.IR
   ) where
 
diff --git a/src/Ethereum/Analyzer/CfgAugWithTopNPass.hs b/src/Ethereum/Analyzer/CfgAugWithTopNPass.hs
--- a/src/Ethereum/Analyzer/CfgAugWithTopNPass.hs
+++ b/src/Ethereum/Analyzer/CfgAugWithTopNPass.hs
@@ -11,14 +11,12 @@
 import Blockchain.ExtWord
 import Blockchain.VM.Opcodes as BVO
 import Compiler.Hoopl
-import Control.Monad
 import Data.Bits as Db
 import Data.ByteString as DB
 import Data.List as DL
 import Data.List.Extra
 import Data.Maybe as DM
 import Data.Set as DS
-import Data.Word
 import Legacy.Haskoin.V0102.Network.Haskoin.Crypto.BigWord
 
 type StackElemFact = WithTop (Set Word256)
@@ -70,6 +68,9 @@
 _sizeBound :: Int
 _sizeBound = 10
 
+mkTopList
+  :: forall b b1 a.
+     [b] -> [Pointed C b1 a]
 mkTopList = DL.map (const Top)
 
 pairCompute :: (Word256 -> Word256 -> Word256) -> StackNFact -> StackNFact
@@ -87,7 +88,7 @@
 
 popStack :: Int -> StackNFact -> StackNFact
 popStack 0 f = f
-popStack n (h:t) = popStack (n - 1) (t ++ [Top])
+popStack n (_:t) = popStack (n - 1) (t ++ [Top])
 
 pushStack' :: StackElemFact -> StackNFact -> StackNFact
 pushStack' e flist = e : (dropEnd 1 flist)
@@ -102,9 +103,8 @@
 b2w256 True = 1
 b2w256 False = 0
 
-w256Not :: Word256 -> Word256
-w256Not wd = bytesToWord256 $ DL.map complement $ word256ToBytes wd
-
+-- w256Not :: Word256 -> Word256
+-- w256Not wd = bytesToWord256 $ DL.map complement $ word256ToBytes wd
 w256And :: Word256 -> Word256 -> Word256
 w256And wd1 wd2 =
   bytesToWord256 $ DL.zipWith (.&.) (word256ToBytes wd1) (word256ToBytes wd2)
@@ -119,8 +119,8 @@
 
 peekStack :: Int -> StackNFact -> StackElemFact
 peekStack _ [] = Top
-peekStack 1 (h:t) = h
-peekStack n (h:t) = peekStack (n - 1) t
+peekStack 1 (h:_) = h
+peekStack n (_:t) = peekStack (n - 1) t
 
 swapStack :: Int -> StackNFact -> StackNFact
 swapStack n stk =
@@ -269,14 +269,14 @@
 opGUnit :: HplOp e x -> Graph HplOp e x
 opGUnit co@CoOp {} = gUnitCO $ BlockCO co BNil
 opGUnit oo@OoOp {} = gUnitOO $ BMiddle oo
+opGUnit oo@HpCodeCopy {} = gUnitOO $ BMiddle oo
 opGUnit oc@OcOp {} = gUnitOC $ BlockOC BNil oc
 
-catPElems :: [Pointed e x t] -> [t]
-catPElems = mapMaybe maybePElem
-  where
-    maybePElem (PElem v) = Just v
-    maybePElem _ = Nothing
-
+-- catPElems :: [Pointed e x t] -> [t]
+-- catPElems = mapMaybe maybePElem
+--   where
+--     maybePElem (PElem v) = Just v
+--     maybePElem _ = Nothing
 cfgAugWithTopNRewrite :: FwdRewrite WordLabelMapFuelM HplOp StackNFact
 cfgAugWithTopNRewrite = mkFRewrite3 coR ooR ocR
   where
@@ -332,39 +332,57 @@
   let entry_ = entryOf $ ctorOf contract
       body = bodyOf $ ctorOf contract
   case entry_ of
-       Nothing -> return contract
-       Just entry -> do
-         newBody <-
-           runWithFuel
-             10000000000
-             (fst <$>
-              analyzeAndRewriteFwdBody
-                cfgAugWithTopNPass
-                entry
-                body
-                (mapSingleton entry $ fact_bot $ fp_lattice cfgAugWithTopNPass))
-         let blocks = DL.map snd $ bodyList newBody
-             ooOps = DL.concatMap ((\(_, b, _) -> blockToList b) . blockSplit) blocks
-             newHexstrings = mapMaybe (
-               \op -> case op of
-                        HpCodeCopy offset ->
-                          let newhs = DB.drop (fromInteger (getBigWordInteger offset) * 2) hexstring
-                          in if DB.null newhs then Nothing else Just newhs
-                        _ -> Nothing) ooOps
-         case newHexstrings of
-           [] -> return contract { ctorOf = HplCode (Just entry) newBody }
-           [newhs] -> do
-             HplCode (Just disEntry) disBody <-
-               evmOps2HplCode $ decompileHexString newhs
-             newDisBody <- runWithFuel
-               10000000000
-               (fst <$>
-                analyzeAndRewriteFwdBody
-                cfgAugWithTopNPass
-                disEntry
-                disBody
-                (mapSingleton disEntry $ fact_bot $ fp_lattice cfgAugWithTopNPass))
-             return HplContract { ctorOf = HplCode (Just entry) newBody
-                                , dispatcherOf = HplCode (Just disEntry) newDisBody }
-           _  -> error $ "doCfgAugWithTopNPass: unexpected newHexstrings length: "
-             ++ (show $ DL.length newHexstrings)
+    Nothing -> return contract
+    Just entry -> do
+      newBody <-
+        runWithFuel
+          10000000000
+          (fst <$>
+           analyzeAndRewriteFwdBody
+             cfgAugWithTopNPass
+             entry
+             body
+             (mapSingleton entry $ fact_bot $ fp_lattice cfgAugWithTopNPass))
+      let blocks = DL.map snd $ bodyList newBody
+          ooOps = DL.concatMap ((\(_, b, _) -> blockToList b) . blockSplit) blocks
+          newHexstrings =
+            mapMaybe
+              (\op ->
+                  case op of
+                    HpCodeCopy offset ->
+                      let newhs =
+                            DB.drop
+                              (fromInteger (getBigWordInteger offset) * 2)
+                              hexstring
+                      in if DB.null newhs
+                           then Nothing
+                           else Just newhs
+                    _ -> Nothing)
+              ooOps
+      case newHexstrings of
+        [] ->
+          return
+            contract
+            { ctorOf = HplCode (Just entry) newBody
+            }
+        [newhs] -> do
+          HplCode (Just disEntry) disBody <-
+            evmOps2HplCode $ decompileHexString newhs
+          newDisBody <-
+            runWithFuel
+              10000000000
+              (fst <$>
+               analyzeAndRewriteFwdBody
+                 cfgAugWithTopNPass
+                 disEntry
+                 disBody
+                 (mapSingleton disEntry $ fact_bot $ fp_lattice cfgAugWithTopNPass))
+          return
+            HplContract
+            { ctorOf = HplCode (Just entry) newBody
+            , dispatcherOf = HplCode (Just disEntry) newDisBody
+            }
+        _ ->
+          error $
+          "doCfgAugWithTopNPass: unexpected newHexstrings length: " ++
+          (show $ DL.length newHexstrings)
diff --git a/src/Ethereum/Analyzer/CfgAugmentPass.hs b/src/Ethereum/Analyzer/CfgAugmentPass.hs
--- a/src/Ethereum/Analyzer/CfgAugmentPass.hs
+++ b/src/Ethereum/Analyzer/CfgAugmentPass.hs
@@ -49,6 +49,7 @@
     coT _ f = f
     ooT :: HplOp O O -> StackTopFact -> StackTopFact
     ooT (OoOp (_, op)) f = opT op f
+    ooT (HpCodeCopy _) f = f
     ocT :: HplOp O C -> StackTopFact -> FactBase StackTopFact
     ocT hplop@(OcOp (_, op) _) f = distributeFact hplop (opT op f)
     opT :: Operation -> StackTopFact -> StackTopFact
@@ -78,6 +79,7 @@
 opGUnit :: HplOp e x -> Graph HplOp e x
 opGUnit co@CoOp {} = gUnitCO $ BlockCO co BNil
 opGUnit oo@OoOp {} = gUnitOO $ BMiddle oo
+opGUnit oo@HpCodeCopy {} = gUnitOO $ BMiddle oo
 opGUnit oc@OcOp {} = gUnitOC $ BlockOC BNil oc
 
 cfgAugmentRewrite :: FwdRewrite WordLabelMapFuelM HplOp StackTopFact
diff --git a/src/Ethereum/Analyzer/Util.hs b/src/Ethereum/Analyzer/Util.hs
--- a/src/Ethereum/Analyzer/Util.hs
+++ b/src/Ethereum/Analyzer/Util.hs
@@ -62,6 +62,9 @@
           bd
   in mkGraph nList eList
 
+visParams
+  :: forall n el.
+     GraphvizParams n (Block HplOp C C) el () (Block HplOp C C)
 visParams =
   nonClusteredParams
   { fmtNode = \(_, nl) -> [toLabel $ show nl, shape BoxShape]
diff --git a/test/Ethereum/Analyzer/CfgAugWithTopNPassSpec.hs b/test/Ethereum/Analyzer/CfgAugWithTopNPassSpec.hs
--- a/test/Ethereum/Analyzer/CfgAugWithTopNPassSpec.hs
+++ b/test/Ethereum/Analyzer/CfgAugWithTopNPassSpec.hs
@@ -13,12 +13,8 @@
 spec = do
   describe "doCfgAugWithTopNPass" $
     do it "works for hexcode1" $
-         do let result =
-                  unWordLabelMapM $
-                     show <$> doCfgAugWithTopNPass hexcode1
+         do let result = unWordLabelMapM $ show <$> doCfgAugWithTopNPass hexcode1
             length result `shouldBe` 4815
        it "works for hexcode2" $
-         do let result =
-                  unWordLabelMapM $
-                   show <$> doCfgAugWithTopNPass hexcode2
+         do let result = unWordLabelMapM $ show <$> doCfgAugWithTopNPass hexcode2
             result `shouldContain` "OC: 9: JUMPI -> [L2,L4]"
diff --git a/test/Ethereum/Analyzer/CfgAugmentPassSpec.hs b/test/Ethereum/Analyzer/CfgAugmentPassSpec.hs
--- a/test/Ethereum/Analyzer/CfgAugmentPassSpec.hs
+++ b/test/Ethereum/Analyzer/CfgAugmentPassSpec.hs
@@ -20,7 +20,7 @@
                      show <$> doCfgAugmentPass contract
             length result `shouldBe` 4769
        it "works for hexcode2" $
-         do let decompiled@((loc, _):_) = decompileHexString hexcode2
+         do let decompiled@((_, _):_) = decompileHexString hexcode2
                 result =
                   unWordLabelMapM $
                   do contract <- evmOps2HplContract decompiled
diff --git a/test/Ethereum/Analyzer/UtilSpec.hs b/test/Ethereum/Analyzer/UtilSpec.hs
--- a/test/Ethereum/Analyzer/UtilSpec.hs
+++ b/test/Ethereum/Analyzer/UtilSpec.hs
@@ -198,7 +198,7 @@
               "    5 -> 6;\n" ++
               "    7 -> 8;\n" ++ "    9 -> 10;\n" ++ "    10 -> 11;\n" ++ "}"
        it "shows HplBody after CfgAugmentPass" $
-         do let decompiled@((loc, _):_) = decompileHexString hexcode2
+         do let decompiled@((_, _):_) = decompileHexString hexcode2
                 result =
                   unWordLabelMapM $
                   do contract <- evmOps2HplContract decompiled
diff --git a/test/Ethereum/AnalyzerSpec.hs b/test/Ethereum/AnalyzerSpec.hs
--- a/test/Ethereum/AnalyzerSpec.hs
+++ b/test/Ethereum/AnalyzerSpec.hs
@@ -5,11 +5,8 @@
   ) where
 
 import Ethereum.Analyzer
-import Blockchain.ExtWord
-import Blockchain.VM.Opcodes
 import Data.List as DL
 import Data.List.Extra as DLE
-import Legacy.Haskoin.V0102.Network.Haskoin.Crypto.BigWord
 import SpecCommon
 import Test.Hspec
 
