Browse Source

Remove ewasm target and rename usable parts for evm target (#981)

The Ethereum Foundation has stopped funding for ewasm work, so it is
unlikely to happen in the current form. In addition, burrow has been end
of life'd by Hyperledger. So, the ewasm target is no longer useful.

We would love to have an evm target at some point in the future. Many
parts of the ewasm target is re-usable for evm, so we rename ewasm to
evm and remove the parts which are irrelevant for evm.

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 3 years ago
parent
commit
f59edd6d26
83 changed files with 3031 additions and 8772 deletions
  1. 2 2
      .github/workflows/release.yml
  2. 1 35
      .github/workflows/test.yml
  3. 1 1
      Cargo.toml
  4. 3 3
      README.md
  5. 1 1
      docs/contributing.rst
  6. 2 4
      docs/index.rst
  7. 3 8
      docs/language/builtins.rst
  8. 1 6
      docs/language/contracts.rst
  9. 1 6
      docs/language/functions.rst
  10. 6 9
      docs/running.rst
  11. 0 18
      docs/targets/burrow.rst
  12. 2 2
      docs/testing.rst
  13. 0 5
      integration/burrow/.gitignore
  14. 0 20
      integration/burrow/flipper.sol
  15. 0 20
      integration/burrow/package.json
  16. 0 148
      integration/burrow/primitives.sol
  17. 0 182
      integration/burrow/simple.spec.ts
  18. 0 62
      integration/burrow/tsconfig.json
  19. 24 79
      src/bin/solang.rs
  20. 6 6
      src/codegen/expression.rs
  21. 2 2
      src/codegen/mod.rs
  22. 18 84
      src/emit/binary.rs
  23. 1 1
      src/emit/ethabiencoder.rs
  24. 0 2105
      src/emit/ewasm.rs
  25. 0 1
      src/emit/mod.rs
  26. 5 5
      src/lib.rs
  27. 1 1
      src/linker/mod.rs
  28. 11 35
      src/linker/wasm.rs
  29. 8 8
      src/sema/builtin.rs
  30. 4 4
      src/sema/expression.rs
  31. 2 2
      src/sema/functions.rs
  32. 1 1
      src/sema/namespace.rs
  33. 35 35
      src/sema/yul/builtin.rs
  34. 11 11
      src/sema/yul/tests/expression.rs
  35. 3 1
      src/sema/yul/tests/mod.rs
  36. 2 2
      src/sema/yul/tests/mutability.rs
  37. 2 2
      tests/codegen_testcases/solidity/constant_folding.sol
  38. 2 2
      tests/codegen_testcases/solidity/llvm_type.sol
  39. 2 2
      tests/codegen_testcases/yul/evm_builtin.sol
  40. 29 23
      tests/contract.rs
  41. 12 0
      tests/contract_testcases/evm/call/call.dot
  42. 0 0
      tests/contract_testcases/evm/call/call.sol
  43. 12 0
      tests/contract_testcases/evm/call/call_01.dot
  44. 0 0
      tests/contract_testcases/evm/call/call_01.sol
  45. 13 13
      tests/contract_testcases/evm/call/call_02.dot
  46. 0 0
      tests/contract_testcases/evm/call/call_02.sol
  47. 1668 0
      tests/contract_testcases/evm/comment_tests.dot
  48. 0 0
      tests/contract_testcases/evm/comment_tests.sol
  49. 13 13
      tests/contract_testcases/evm/dead_storage_different_types.dot
  50. 0 0
      tests/contract_testcases/evm/dead_storage_different_types.sol
  51. 65 65
      tests/contract_testcases/evm/interface_inheritance.dot
  52. 0 0
      tests/contract_testcases/evm/interface_inheritance.sol
  53. 74 74
      tests/contract_testcases/evm/llvm_type.dot
  54. 0 0
      tests/contract_testcases/evm/llvm_type.sol
  55. 10 0
      tests/contract_testcases/evm/public_internal_function.dot
  56. 0 0
      tests/contract_testcases/evm/public_internal_function.sol
  57. 7 7
      tests/contract_testcases/evm/public_mapping.dot
  58. 0 0
      tests/contract_testcases/evm/public_mapping.sol
  59. 373 373
      tests/contract_testcases/evm/rubixi.dot
  60. 0 0
      tests/contract_testcases/evm/rubixi.sol
  61. 16 16
      tests/contract_testcases/evm/selector_override.dot
  62. 0 0
      tests/contract_testcases/evm/selector_override.sol
  63. 136 136
      tests/contract_testcases/evm/standalone_call.dot
  64. 0 0
      tests/contract_testcases/evm/standalone_call.sol
  65. 0 12
      tests/contract_testcases/ewasm/call/call.dot
  66. 0 12
      tests/contract_testcases/ewasm/call/call_01.dot
  67. 0 1574
      tests/contract_testcases/ewasm/comment_tests.dot
  68. 0 10
      tests/contract_testcases/ewasm/public_internal_function.dot
  69. 168 0
      tests/evm.rs
  70. 0 2414
      tests/ewasm.rs
  71. 0 89
      tests/ewasm_tests/abi.rs
  72. 0 63
      tests/ewasm_tests/crypto.rs
  73. 0 7
      tests/ewasm_tests/mod.rs
  74. 0 48
      tests/ewasm_tests/modifiers.rs
  75. 0 752
      tests/ewasm_tests/primitives.rs
  76. 0 117
      tests/ewasm_tests/yul.rs
  77. 119 27
      tests/solana_tests/simple.rs
  78. 64 1
      tests/solana_tests/yul.rs
  79. 84 0
      tests/substrate_tests/yul.rs
  80. 1 1
      tests/undefined_variable_detection.rs
  81. 2 2
      tests/unused_variable_detection.rs
  82. 1 1
      vscode/README.md
  83. 1 1
      vscode/package.json

+ 2 - 2
.github/workflows/release.yml

@@ -250,7 +250,7 @@ jobs:
       uses: actions/checkout@v2
     - run:
         docker build . -t ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_REF/refs\/tags\//}
-            --label org.opencontainers.image.description="Solidity Compiler for Solana, Substrate, and ewasm version $(git describe --tags)"
+            --label org.opencontainers.image.description="Solidity Compiler for Solana and Substrate version $(git describe --tags)"
     - run: |
         echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin
         docker push ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_REF/refs\/tags\//}
@@ -267,4 +267,4 @@ jobs:
         docker buildx build . --push \
           -t ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_REF/refs\/tags\//} \
           --platform linux/arm64,linux/amd64 \
-          --label org.opencontainers.image.description="Solidity Compiler for Solana, Substrate, and ewasm version $(git describe --tags)"
+          --label org.opencontainers.image.description="Solidity Compiler for Solana and Substrate version $(git describe --tags)"

+ 1 - 35
.github/workflows/test.yml

@@ -216,7 +216,7 @@ jobs:
           ${{steps.push.outputs.push}} \
           -t ghcr.io/${GITHUB_REPOSITORY}:latest \
           --platform linux/arm64,linux/amd64 \
-          --label org.opencontainers.image.description="Solidity Compiler for Solana, Substrate, and ewasm version $(git describe --tags)"
+          --label org.opencontainers.image.description="Solidity Compiler for Solana and Substrate version $(git describe --tags)"
 
   solana:
     name: Solana Integration test
@@ -283,40 +283,6 @@ jobs:
       run: npm run test
       working-directory: ./integration/substrate
 
-  burrow:
-    name: Burrow Integration test
-    runs-on: ubuntu-20.04
-    container: ubuntu:20.04
-    needs: linux-x86-64
-    services:
-      burrow:
-        image: hyperledger/burrow:0.34.4
-        ports:
-          - 10997
-    steps:
-    - name: Checkout sources
-      uses: actions/checkout@v2
-    - uses: actions/setup-node@v1
-      with:
-        node-version: '14'
-    - uses: actions/download-artifact@master
-      with:
-        name: solang-linux-x86-64
-        path: bin
-    - run: |
-        chmod 755 ./bin/solang
-        echo "$(pwd)/bin" >> $GITHUB_PATH
-    - run: npm install
-      working-directory: ./integration/burrow
-    - name: Build Solang contract
-      run: npm run build
-      working-directory: ./integration/burrow
-    - name: Set github env
-      run: echo "RPC_URL=burrow:10997" >> $GITHUB_ENV
-    - name: Deploy and test contract
-      run: npm run test
-      working-directory: ./integration/burrow
-
   vscode:
     name: Visual Code Extension
     runs-on: ubuntu-20.04

+ 1 - 1
Cargo.toml

@@ -7,7 +7,7 @@ documentation = "https://solang.readthedocs.io/"
 license = "Apache-2.0"
 build = "build.rs"
 description = "Solang Solidity Compiler"
-keywords = [ "solidity", "compiler", "solana", "substrate", "ewasm" ]
+keywords = [ "solidity", "compiler", "solana", "substrate" ]
 rust-version = "1.56.1"
 edition = "2021"
 

+ 3 - 3
README.md

@@ -1,4 +1,4 @@
-# solang - Solidity Compiler for Solana, Substrate, and ewasm
+# solang - Solidity Compiler for Solana and Substrate
 
 [![Discord](https://img.shields.io/discord/905194001349627914?logo=Hyperledger&style=plastic)](https://discord.gg/jhn4rkqNsT)
 [![CI](https://github.com/hyperledger-labs/solang/workflows/test/badge.svg)](https://github.com/hyperledger-labs/solang/actions)
@@ -7,8 +7,8 @@
 [![LoC](https://tokei.rs/b1/github/hyperledger-labs/solang?category=lines)](https://github.com/hyperledger-labs/solang)
 
 Welcome to Solang, a new Solidity compiler written in rust which uses
-llvm as the compiler backend. Solang can compile Solidity for Solana,
-Substrate, and ewasm. Solang is source compatible with Solidity 0.8, with
+llvm as the compiler backend. Solang can compile Solidity for Solana and
+Substrate. Solang is source compatible with Solidity 0.8, with
 some caveats due to differences in the underlying blockchain.
 
 Solang is under active development right now, and has

+ 1 - 1
docs/contributing.rst

@@ -7,7 +7,7 @@ contribute.
 Target Specific
 ---------------
 
-Solang supports Substrate, ewasm, and Solana. These targets need testing
+Solang supports Substrate and Solana. These targets need testing
 via integration tests. New targets like
 `Fabric <https://github.com/hyperledger-labs/fabric-chaincode-wasm>`_ need to be
 added, and tests added.

+ 2 - 4
docs/index.rst

@@ -3,9 +3,8 @@ Solang Solidity Compiler
 
 Welcome to the Solang Solidity Compiler. Using Solang, you can compile smart contracts written in
 `Solidity <https://en.wikipedia.org/wiki/Solidity>`_ for
-`Solana <https://www.solana.com/>`_,
-`Parity Substrate <https://substrate.io/>`_, and
-`Ethereum ewasm <https://github.com/ewasm/design>`_. It uses the
+`Solana <https://www.solana.com/>`_ and
+`Parity Substrate <https://substrate.io/>`_. It uses the
 `llvm <https://www.llvm.org/>`_ compiler framework to produce WebAssembly
 (wasm) or BPF contract code. As result, the output is highly optimized, which saves you in gas costs.
 
@@ -33,7 +32,6 @@ Contents
 
    targets/solana.rst
    targets/substrate.rst
-   targets/burrow.rst
 
 .. toctree::
    :maxdepth: 3

+ 3 - 8
docs/language/builtins.rst

@@ -80,9 +80,8 @@ address ``msg.sender``
 .. _gasprice:
 
 uint128 ``tx.gasprice``
-    The price of one unit of gas, only available with the ewasm target.
-    This field cannot be used on Parity Substrate, the explanation
-    is in the warning box below.
+    The price of one unit of gas. This field cannot be used on Parity Substrate,
+    see the warning box below.
 
 .. note::
     ``tx.gasprice`` is not available on Solana.
@@ -261,8 +260,7 @@ ABI encoding and decoding
 _________________________
 
 The ABI encoding depends on the target being compiled for. Substrate uses the
-`SCALE Codec <https://docs.substrate.io/reference/scale-codec/>`_ and ewasm uses
-`Ethereum ABI encoding <https://docs.soliditylang.org/en/v0.7.6/abi-spec.html>`_.
+`SCALE Codec <https://docs.substrate.io/reference/scale-codec/>`_.
 
 abi.decode(bytes, (*type-list*))
 ++++++++++++++++++++++++++++++++
@@ -580,9 +578,6 @@ print() takes a string argument.
   When using Substrate, this function is only available on development chains.
   If you use this function on a production chain, the contract will fail to load.
 
-  When using ewasm, the function is only available on hera when compiled with
-  debugging.
-
 .. _selfdestruct:
 
 selfdestruct(address payable recipient)

+ 1 - 6
docs/language/contracts.rst

@@ -26,7 +26,7 @@ If a contract is expected to hold receive value on instantiation, the constructo
 .. note::
 
   Parity Substrate allows multiple constructors to be defined, which is not true for
-  ewasm. So, when building for Substrate, multiple constructors can be
+  Solana. So, when building for Substrate, multiple constructors can be
   defined as long as their argument list is different (i.e. overloaded).
 
   When the contract is deployed in the Polkadot UI, the user can select the constructor to be used.
@@ -91,11 +91,6 @@ The constructor should be declared ``payable`` for this to work.
 Setting the salt, gas, and space for the new contract
 _____________________________________________________
 
-.. note::
-    `ewasm <https://github.com/ewasm/design/blob/master/eth_interface.md>`_ does not
-    yet provide a method for setting the salt or gas for the new contract, so
-    these values are ignored.
-
 .. note::
     The gas or salt cannot be set on Solana. However, when creating a contract
     on Solana, the size of the new account can be set using `space:`.

+ 1 - 6
docs/language/functions.rst

@@ -305,7 +305,7 @@ can also have their selector overriden. If a function overrides another one in a
 base contract, then the selector of both must match.
 
 .. warning::
-    On ewasm and Solana, changing the selector may result in a mismatch between
+    On Solana, changing the selector may result in a mismatch between
     the contract metadata and the actual contract code, because the metadata does
     not explicitly store the selector.
 
@@ -515,11 +515,6 @@ calling.
         (bool success, bytes rawresult) = foo.call{value: 102, gas: 1000}(rawcalldata);
     }
 
-.. note::
-
-    ewasm also supports ``staticcall()`` and ``delegatecall()`` on the address type. These
-    call types are not supported on Parity Substrate.
-
 .. _fallback_receive:
 
 fallback() and receive() function

+ 6 - 9
docs/running.rst

@@ -7,12 +7,11 @@ wasm or bpf file which is ready for deployment on a chain, and an metadata
 file (also known as the abi).
 
 The following targets are supported right now:
-`Solana <https://www.solana.com/>`_,
-`Parity Substrate <https://substrate.io/>`_, and
-`Ethereum ewasm <https://github.com/ewasm/design>`_.
+`Solana <https://www.solana.com/>`_ and
+`Parity Substrate <https://substrate.io/>`_.
 
-Solang supports auto-completion for multiple shells. Use ``solang shell-complete --help`` to 
-learn whether your favorite shell is supported. If so, evaluate the output of 
+Solang supports auto-completion for multiple shells. Use ``solang shell-complete --help`` to
+learn whether your favorite shell is supported. If so, evaluate the output of
 ``solang shell-complete <SHELL>`` in order to activate it. Example installation with ``bash``:
 
 .. code-block:: bash
@@ -36,7 +35,7 @@ Options:
   will be silent if there are no errors or warnings.
 
 \\-\\-target *target*
-  This takes one argument, which can either be ``solana``, ``substrate``, or ``ewasm``. The target
+  This takes one argument, which can either be ``solana`` or ``substrate``. The target
   must be specified.
 
 \\-\\-address\\-length *length-in-bytes*
@@ -73,8 +72,6 @@ Options:
   `standard json output <https://solidity.readthedocs.io/en/v0.5.13/using-the-compiler.html#output-description>`_. No output files are written, all the
   output will be in json on stdout.
 
-  This feature is used by `Hyperledger Burrow's deploy tool <https://hyperledger.github.io/burrow/#/tutorials/3-contracts?id=deploy-artifacts>`_.
-
 \\-\\-emit *phase*
   This option is can be used for debugging Solang itself. This is used to
   output early phases of compilation.
@@ -130,7 +127,7 @@ followed by one or more solidity source filenames.
 Options:
 
 \\-\\-target *target*
-  This takes one argument, which can either be ``solana``, ``substrate``, or ``ewasm``. The target
+  This takes one argument, which can either be ``solana`` or ``substrate``. The target
   must be specified.
 
 \\-\\-address\\-length *length-in-bytes*

+ 0 - 18
docs/targets/burrow.rst

@@ -1,18 +0,0 @@
-Hyperledger Burrow (ewasm)
-==========================
-
-The ewasm specification is not finalized yet. There is no `create2` or `chainid` call, and the keccak256 precompile
-contract has not been finalized yet.
-
-In Burrow, Solang is used transparently by the ``burrow deploy`` tool if it is given the ``--wasm`` argument.
-When building and deploying a Solidity contract, rather than running the ``solc`` compiler, it will run
-the ``solang`` compiler and deploy it as a wasm contract.
-
-This is documented in the `burrow documentation <https://hyperledger.github.io/burrow/#/reference/wasm>`_.
-
-ewasm has been tested with `Hyperledger Burrow <https://github.com/hyperledger/burrow>`_.
-Please use the latest master version of burrow, as ewasm support is still maturing in Burrow.
-
-Some language features have not been fully implemented yet on ewasm:
-
-- Contract storage variables types ``string``, ``bytes`` and function types are not implemented

+ 2 - 2
docs/testing.rst

@@ -38,10 +38,10 @@ These tests do the following:
 Mock contract virtual machine
 -----------------------------
 
-For Substrate, ewasm, and Solana there is a mock virtual machine. System and runtime call
+For Substrate and Solana there is a mock virtual machine. System and runtime call
 implementations should semantically represent the real on-chain virtual machine as exact as
 possible. Aspects that don't matter in the context of unit testing (e.g. gas-metering) may be
-ignored in the mock virtual machine. For ewasm and Substrate, this uses the
+ignored in the mock virtual machine. For Substrate, this uses the
 `wasmi crate <https://crates.io/crates/wasmi>`_ and for Solana it
 uses the `Solana RBPF crate <https://crates.io/crates/solana_rbpf>`_.
 

+ 0 - 5
integration/burrow/.gitignore

@@ -1,5 +0,0 @@
-*.js
-*.abi
-*.wasm
-node_modules
-package-lock.json

+ 0 - 20
integration/burrow/flipper.sol

@@ -1,20 +0,0 @@
-contract flipper {
-	bool private value;
-
-	/// Constructor that initializes the `bool` value to the given `init_value`.
-	constructor(bool initvalue) {
-		value = initvalue;
-	}
-
-	/// A message that can be called on instantiated contracts.
-	/// This one flips the value of the stored `bool` from `true`
-	/// to `false` and vice versa.
-	function flip() public {
-		value = !value;
-	}
-
-	/// Simply returns the current value of our `bool`.
-	function get() public view returns (bool) {
-		return value;
-	}
-}

+ 0 - 20
integration/burrow/package.json

@@ -1,20 +0,0 @@
-{
-  "name": "burrow-tests",
-  "version": "0.0.1",
-  "description": "Integration tests with Solang and Hyperledger Burrow",
-  "scripts": {
-    "test": "tsc; ts-mocha *.spec.ts",
-    "build": "solang compile *.sol --target ewasm -v"
-  },
-  "author": "Sean Young <sean@mess.org>",
-  "license": "MIT",
-  "devDependencies": {
-    "@types/mocha": "^8.0.4",
-    "@types/node": "^14.14.10",
-    "mocha": "^8.2.1",
-    "ts-mocha": "^8.0.0",
-    "typescript": "^4.1.2",
-    "@hyperledger/burrow": "0.34.4",
-    "@ethersproject/bignumber": "^5.2.0"
-  }
-}

+ 0 - 148
integration/burrow/primitives.sol

@@ -1,148 +0,0 @@
-
-contract primitives {
-	enum oper { add, sub, mul, div, mod, pow, shl, shr, or, and, xor }
-
-	function is_mul(oper op) pure public returns (bool) {
-		return op == oper.mul;
-	}
-
-	function return_div() pure public returns (oper) {
-		return oper.div;
-	}
-
-	function op_i64(oper op, int64 a, int64 b) pure public returns (int64) {
-		if (op == oper.add) {
-			return a + b;
-		} else if (op == oper.sub) {
-			return a - b;
-		} else if (op == oper.mul) {
-			return a * b;
-		} else if (op == oper.div) {
-			return a / b;
-		} else if (op == oper.mod) {
-			return a % b;
-		} else if (op == oper.shl) {
-			return a << b;
-		} else if (op == oper.shr) {
-			return a >> b;
-		} else {
-			revert();
-		}
-	}
-
-	function op_u64(oper op, uint64 a, uint64 b) pure public returns (uint64) {
-		if (op == oper.add) {
-			return a + b;
-		} else if (op == oper.sub) {
-			return a - b;
-		} else if (op == oper.mul) {
-			return a * b;
-		} else if (op == oper.div) {
-			return a / b;
-		} else if (op == oper.mod) {
-			return a % b;
-		} else if (op == oper.pow) {
-			return a ** b;
-		} else if (op == oper.shl) {
-			return a << b;
-		} else if (op == oper.shr) {
-			return a >> b;
-		} else {
-			revert();
-		}
-	}
-
-	function op_u256(oper op, uint256 a, uint256 b) pure public returns (uint256) {
-		if (op == oper.add) {
-			return a + b;
-		} else if (op == oper.sub) {
-			return a - b;
-		} else if (op == oper.mul) {
-			return a * b;
-		} else if (op == oper.div) {
-			return a / b;
-		} else if (op == oper.mod) {
-			return a % b;
-		} else if (op == oper.pow) {
-			return a ** uint256(b);
-		} else if (op == oper.shl) {
-			return a << b;
-		} else if (op == oper.shr) {
-			return a >> b;
-		} else {
-			revert();
-		}
-	}
-
-	function op_i256(oper op, int256 a, int256 b) pure public returns (int256) {
-		if (op == oper.add) {
-			return a + b;
-		} else if (op == oper.sub) {
-			return a - b;
-		} else if (op == oper.mul) {
-			return a * b;
-		} else if (op == oper.div) {
-			return a / b;
-		} else if (op == oper.mod) {
-			return a % b;
-		} else if (op == oper.shl) {
-			return a << b;
-		} else if (op == oper.shr) {
-			return a >> b;
-		} else {
-			revert();
-		}
-	}
-
-	function return_u8_6() public pure returns (bytes6) {
-		return "ABCDEF";
-	}
-
-	function op_u8_5_shift(oper op, bytes5 a, uint64 r) pure public returns (bytes5) {
-		if (op == oper.shl) {
-			return a << r;
-		} else if (op == oper.shr) {
-			return a >> r;
-		} else {
-			revert();
-		}
-	}
-
-	function op_u8_5(oper op, bytes5 a, bytes5 b) pure public returns (bytes5) {
-		if (op == oper.or) {
-			return a | b;
-		} else if (op == oper.and) {
-			return a & b;
-		} else if (op == oper.xor) {
-			return a ^ b;
-		} else {
-			revert();
-		}
-	}
-
-	function op_u8_14_shift(oper op, bytes14 a, uint64 r) pure public returns (bytes14) {
-		if (op == oper.shl) {
-			return a << r;
-		} else if (op == oper.shr) {
-			return a >> r;
-		} else {
-			revert();
-		}
-	}
-
-	function op_u8_14(oper op, bytes14 a, bytes14 b) pure public returns (bytes14) {
-		if (op == oper.or) {
-			return a | b;
-		} else if (op == oper.and) {
-			return a & b;
-		} else if (op == oper.xor) {
-			return a ^ b;
-		} else {
-			revert();
-		}
-	}
-
-	function address_passthrough(address a) pure public returns (address) {
-		return a;
-	}
-}

+ 0 - 182
integration/burrow/simple.spec.ts

@@ -1,182 +0,0 @@
-import { strictEqual } from 'assert';
-import { Contract, Client } from '@hyperledger/burrow';
-import { readFileSync } from 'fs';
-import { BigNumber } from '@ethersproject/bignumber';
-
-const default_url: string = "localhost:10997";
-const default_account = 'ABE2314B5D38BE9EA2BEDB8E58345C62FA6636BA';
-
-export async function establishConnection(): Promise<Client> {
-    let url = process.env.RPC_URL || default_url;
-    return new Client(url, default_account);
-}
-
-describe('Deploy solang contract and test', () => {
-    it('flipper', async function () {
-        this.timeout(50000);
-
-        let conn = await establishConnection();
-
-        const bytecode: string = readFileSync('flipper.wasm').toString('hex');
-
-        const abi = JSON.parse(readFileSync('flipper.abi', 'utf-8'));
-
-        let contract = new Contract({ abi, bytecode });
-
-        let prog: any = await contract.deploy(conn, false);
-
-        let output = await prog.get();
-        strictEqual(output[0], false);
-
-        await prog.flip();
-
-        output = await prog.get();
-        strictEqual(output[0], true);
-    });
-
-    it('flipper-true', async function () {
-        this.timeout(50000);
-
-        let conn = await establishConnection();
-
-        const bytecode: string = readFileSync('flipper.wasm').toString('hex');
-
-        const abi = JSON.parse(readFileSync('flipper.abi', 'utf-8'));
-
-        let contract = new Contract({ abi, bytecode });
-
-        let prog: any = await contract.deploy(conn, true);
-
-        let output = await prog.get();
-        strictEqual(output[0], true);
-
-        await prog.flip();
-
-        output = await prog.get();
-        strictEqual(output[0], false);
-    });
-
-    it('primitives', async function () {
-        this.timeout(100000);
-
-        let conn = await establishConnection();
-
-        const bytecode: string = readFileSync('primitives.wasm').toString('hex');
-
-        const abi = JSON.parse(readFileSync('primitives.abi', 'utf-8'));
-
-        // call the constructor
-        let contract = new Contract({ abi, bytecode });
-
-        let prog: any = await contract.deploy(conn);
-
-        // TEST Basic enums
-        // in ethereum, an enum is described as an uint8 so can't use the enum
-        // names programmatically. 0 = add, 1 = sub, 2 = mul, 3 = div, 4 = mod, 5 = pow, 6 = shl, 7 = shr
-        let res = await prog.is_mul(2);
-        strictEqual(res[0], true);
-
-        res = await prog.return_div();
-        strictEqual(res[0], 3);
-
-        // TEST uint and int types, and arithmetic/bitwise ops
-        res = await prog.op_i64(0, 1000, 4100);
-        strictEqual(res[0], 5100);
-        res = await prog.op_i64(1, 1000, 4100);
-        strictEqual(res[0], -3100);
-        res = await prog.op_i64(2, 1000, 4100);
-        strictEqual(res[0], 4100000);
-        res = await prog.op_i64(3, 1000, 10);
-        strictEqual(res[0], 100);
-        res = await prog.op_i64(4, 1000, 99);
-        strictEqual(res[0], 10);
-        res = await prog.op_i64(6, - 1000, 8);
-        strictEqual(res[0], -256000);
-        res = await prog.op_i64(7, - 1000, 8);
-        strictEqual(res[0], -4);
-
-
-        res = await prog.op_u64(0, 1000, 4100);
-        strictEqual(res[0], 5100);
-        res = await prog.op_u64(1, 1000, 4100);
-        strictEqual(BigNumber.from('18446744073709548516').eq(res[0]), true); // (2^64)-18446744073709548516 = 3100
-        res = await prog.op_u64(2, 123456789, 123456789);
-        strictEqual(BigNumber.from('15241578750190521').eq(res[0]), true);
-        res = await prog.op_u64(3, 123456789, 100);
-        strictEqual(res[0], 1234567);
-        res = await prog.op_u64(4, 123456789, 100);
-        strictEqual(res[0], 89);
-        res = await prog.op_u64(5, 3, 7);
-        strictEqual(res[0], 2187);
-        res = await prog.op_i64(6, 1000, 8);
-        strictEqual(res[0], 256000);
-        res = await prog.op_i64(7, 1000, 8);
-        strictEqual(res[0], 3);
-
-        // now for 256 bit operations
-        res = await prog.op_i256(0, 1000, 4100);
-        strictEqual(res[0], 5100);
-        res = await prog.op_i256(1, 1000, 4100);
-        strictEqual(res[0], -3100);
-        res = await prog.op_i256(2, 1000, 4100);
-        strictEqual(res[0], 4100000);
-        res = await prog.op_i256(3, 1000, 10);
-        strictEqual(res[0], 100);
-        res = await prog.op_i256(4, 1000, 99);
-        strictEqual(res[0], 10);
-        res = await prog.op_i256(6, - 10000000000000, 8);
-        strictEqual(res[0], -2560000000000000);
-        res = await prog.op_i256(7, - 10000000000000, 8);
-        strictEqual(res[0], -39062500000);
-
-        res = await prog.op_u256(0, 1000, 4100);
-        strictEqual(res[0], 5100);
-        res = await prog.op_u256(1, 1000, 4100);
-        strictEqual(BigNumber.from('115792089237316195423570985008687907853269984665640564039457584007913129636836').eq(res[0]), true); // (2^64)-18446744073709548516 = 3100
-        res = await prog.op_u256(2, 123456789, 123456789);
-        strictEqual(BigNumber.from('15241578750190521').eq(res[0]), true);
-        res = await prog.op_u256(3, 123456789, 100);
-        strictEqual(res[0], 1234567);
-        res = await prog.op_u256(4, 123456789, 100);
-        strictEqual(res[0], 89);
-        res = await prog.op_u256(5, 123456789, 9);
-        strictEqual(BigNumber.from('6662462759719942007440037531362779472290810125440036903063319585255179509').eq(res[0]), true);
-        res = await prog.op_i256(6, 10000000000000, 8);
-        strictEqual(res[0].toString(), '2560000000000000');
-        res = await prog.op_i256(7, 10000000000000, 8);
-        strictEqual(res[0].toString(), '39062500000');
-
-
-        // TEST bytesN
-        res = await prog.return_u8_6();
-        strictEqual(res[0].toString('hex'), '414243444546');
-
-        // // TEST bytes5
-        res = await prog.op_u8_5_shift(6, 'deadcafe59', 8);
-        strictEqual(res[0].toString('hex'), 'adcafe5900');
-        res = await prog.op_u8_5_shift(7, 'deadcafe59', 8);
-        strictEqual(res[0].toString('hex'), '00deadcafe');
-        res = await prog.op_u8_5(8, 'deadcafe59', '0000000006');
-        strictEqual(res[0].toString('hex'), 'deadcafe5f');
-        res = await prog.op_u8_5(9, 'deadcafe59', '00000000ff');
-        strictEqual(res[0].toString('hex'), '0000000059');
-        res = await prog.op_u8_5(10, 'deadcafe59', '00000000ff');
-        strictEqual(res[0].toString('hex'), 'deadcafea6');
-
-        // TEST bytes14
-        res = await prog.op_u8_14_shift(6, 'deadcafe123456789abcdefbeef7', 9);
-        strictEqual(res[0].toString('hex'), '5b95fc2468acf13579bdf7ddee00');
-        res = await prog.op_u8_14_shift(7, 'deadcafe123456789abcdefbeef7', 9);
-        strictEqual(res[0].toString('hex'), '006f56e57f091a2b3c4d5e6f7df7');
-        res = await prog.op_u8_14(8, 'deadcafe123456789abcdefbeef7', '0000060000000000000000000000');
-        strictEqual(res[0].toString('hex'), 'deadcefe123456789abcdefbeef7');
-        res = await prog.op_u8_14(9, 'deadcafe123456789abcdefbeef7', '000000000000000000ff00000000');
-        strictEqual(res[0].toString('hex'), '000000000000000000bc00000000');
-        res = await prog.op_u8_14(10, 'deadcafe123456789abcdefbeef7', 'ff00000000000000000000000000');
-        strictEqual(res[0].toString('hex'), '21adcafe123456789abcdefbeef7');
-
-        // TEST address type.
-        res = await prog.address_passthrough(default_account);
-        strictEqual(res[0], default_account);
-    });
-});

+ 0 - 62
integration/burrow/tsconfig.json

@@ -1,62 +0,0 @@
-{
-  "compilerOptions": {
-    /* Visit https://aka.ms/tsconfig.json to read more about this file */
-    /* Basic Options */
-    // "incremental": true,                   /* Enable incremental compilation */
-    "target": "es2020", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
-    "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
-    // "lib": [],                             /* Specify library files to be included in the compilation. */
-    // "allowJs": true,                       /* Allow javascript files to be compiled. */
-    // "checkJs": true,                       /* Report errors in .js files. */
-    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
-    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
-    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
-    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
-    // "outFile": "./",                       /* Concatenate and emit output to single file. */
-    // "outDir": "./",                        /* Redirect output structure to the directory. */
-    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
-    // "composite": true,                     /* Enable project compilation */
-    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
-    // "removeComments": true,                /* Do not emit comments to output. */
-    // "noEmit": true,                        /* Do not emit outputs. */
-    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
-    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
-    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
-    /* Strict Type-Checking Options */
-    "strict": true, /* Enable all strict type-checking options. */
-    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
-    // "strictNullChecks": true,              /* Enable strict null checks. */
-    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
-    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
-    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
-    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
-    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */
-    /* Additional Checks */
-    // "noUnusedLocals": true,                /* Report errors on unused locals. */
-    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
-    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
-    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */
-    /* Module Resolution Options */
-    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
-    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
-    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
-    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
-    // "typeRoots": [],                       /* List of folders to include type definitions from. */
-    // "types": [],                           /* Type declaration files to be included in compilation. */
-    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
-    "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
-    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
-    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */
-    /* Source Map Options */
-    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
-    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
-    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
-    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
-    /* Experimental Options */
-    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
-    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */
-    /* Advanced Options */
-    "skipLibCheck": true, /* Skip type checking of declaration files. */
-    "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
-  }
-}

+ 24 - 79
src/bin/solang.rs

@@ -64,10 +64,11 @@ fn main() {
                     )
                     .arg(
                         Arg::new("TARGET")
-                            .help("Target to build for")
+                            .help("Target to build for [possible values: solana, substrate]")
                             .long("target")
                             .takes_value(true)
-                            .value_parser(["solana", "substrate", "ewasm"])
+                            .value_parser(["solana", "substrate", "evm"])
+                            .hide_possible_values(true)
                             .required(true),
                     )
                     .arg(
@@ -187,7 +188,7 @@ fn main() {
                             .help("Target to build for")
                             .long("target")
                             .takes_value(true)
-                            .value_parser(["solana", "substrate", "ewasm"])
+                            .value_parser(["solana", "substrate", "evm"])
                             .required(true),
                     )
                     .arg(
@@ -233,7 +234,7 @@ fn main() {
                             .help("Target to build for")
                             .long("target")
                             .takes_value(true)
-                            .value_parser(["solana", "substrate", "ewasm"])
+                            .value_parser(["solana", "substrate", "evm"])
                             .required(true),
                     )
                     .arg(
@@ -663,90 +664,34 @@ fn save_intermediates(binary: &solang::emit::binary::Binary, matches: &ArgMatche
 
     match matches.get_one::<String>("EMIT").map(|v| v.as_str()) {
         Some("llvm-ir") => {
-            if let Some(runtime) = &binary.runtime {
-                // In Ethereum, an ewasm contract has two parts, deployer and runtime. The deployer code returns the runtime wasm
-                // as a byte string
-                let llvm_filename = output_file(matches, &format!("{}_deploy", binary.name), "ll");
-
-                if verbose {
-                    eprintln!(
-                        "info: Saving deployer LLVM {} for contract {}",
-                        llvm_filename.display(),
-                        binary.name
-                    );
-                }
-
-                binary.dump_llvm(&llvm_filename).unwrap();
-
-                let llvm_filename = output_file(matches, &format!("{}_runtime", binary.name), "ll");
-
-                if verbose {
-                    eprintln!(
-                        "info: Saving runtime LLVM {} for contract {}",
-                        llvm_filename.display(),
-                        binary.name
-                    );
-                }
-
-                runtime.dump_llvm(&llvm_filename).unwrap();
-            } else {
-                let llvm_filename = output_file(matches, &binary.name, "ll");
-
-                if verbose {
-                    eprintln!(
-                        "info: Saving LLVM IR {} for contract {}",
-                        llvm_filename.display(),
-                        binary.name
-                    );
-                }
+            let llvm_filename = output_file(matches, &binary.name, "ll");
 
-                binary.dump_llvm(&llvm_filename).unwrap();
+            if verbose {
+                eprintln!(
+                    "info: Saving LLVM IR {} for contract {}",
+                    llvm_filename.display(),
+                    binary.name
+                );
             }
 
+            binary.dump_llvm(&llvm_filename).unwrap();
+
             true
         }
 
         Some("llvm-bc") => {
-            // In Ethereum, an ewasm contract has two parts, deployer and runtime. The deployer code returns the runtime wasm
-            // as a byte string
-            if let Some(runtime) = &binary.runtime {
-                let bc_filename = output_file(matches, &format!("{}_deploy", binary.name), "bc");
-
-                if verbose {
-                    eprintln!(
-                        "info: Saving deploy LLVM BC {} for contract {}",
-                        bc_filename.display(),
-                        binary.name
-                    );
-                }
-
-                binary.bitcode(&bc_filename);
+            let bc_filename = output_file(matches, &binary.name, "bc");
 
-                let bc_filename = output_file(matches, &format!("{}_runtime", binary.name), "bc");
-
-                if verbose {
-                    eprintln!(
-                        "info: Saving runtime LLVM BC {} for contract {}",
-                        bc_filename.display(),
-                        binary.name
-                    );
-                }
-
-                runtime.bitcode(&bc_filename);
-            } else {
-                let bc_filename = output_file(matches, &binary.name, "bc");
-
-                if verbose {
-                    eprintln!(
-                        "info: Saving LLVM BC {} for contract {}",
-                        bc_filename.display(),
-                        binary.name
-                    );
-                }
-
-                binary.bitcode(&bc_filename);
+            if verbose {
+                eprintln!(
+                    "info: Saving LLVM BC {} for contract {}",
+                    bc_filename.display(),
+                    binary.name
+                );
             }
 
+            binary.bitcode(&bc_filename);
+
             true
         }
 
@@ -834,7 +779,7 @@ fn target_arg(matches: &ArgMatches) -> Target {
             address_length: *address_length as usize,
             value_length: *value_length as usize,
         },
-        "ewasm" => solang::Target::Ewasm,
+        "evm" => solang::Target::EVM,
         _ => unreachable!(),
     };
 

+ 6 - 6
src/codegen/expression.rs

@@ -699,9 +699,9 @@ pub fn expression(
         }
         // The Substrate gas price builtin takes an argument; the others do not
         ast::Expression::Builtin(loc, _, ast::Builtin::Gasprice, expr)
-            if expr.len() == 1 && ns.target == Target::Ewasm =>
+            if expr.len() == 1 && ns.target == Target::EVM =>
         {
-            builtin_ewasm_gasprice(loc, expr, cfg, contract_no, func, ns, vartab, opt)
+            builtin_evm_gasprice(loc, expr, cfg, contract_no, func, ns, vartab, opt)
         }
         ast::Expression::Builtin(loc, tys, builtin, args) => expr_builtin(
             args,
@@ -1197,7 +1197,7 @@ fn payable_send(
         },
         &Type::Bool,
     );
-    if ns.target != Target::Ewasm {
+    if ns.target != Target::EVM {
         cfg.add(
             vartab,
             Instr::ValueTransfer {
@@ -1246,7 +1246,7 @@ fn payable_transfer(
 ) -> Expression {
     let address = expression(&args[0], cfg, contract_no, func, ns, vartab, opt);
     let value = expression(&args[1], cfg, contract_no, func, ns, vartab, opt);
-    if ns.target != Target::Ewasm {
+    if ns.target != Target::EVM {
         cfg.add(
             vartab,
             Instr::ValueTransfer {
@@ -1513,7 +1513,7 @@ fn abi_encode_call(
     Expression::Variable(*loc, Type::DynamicBytes, res)
 }
 
-fn builtin_ewasm_gasprice(
+fn builtin_evm_gasprice(
     loc: &pt::Loc,
     expr: &[ast::Expression],
     cfg: &mut ControlFlowGraph,
@@ -2537,7 +2537,7 @@ pub fn default_gas(ns: &Namespace) -> Expression {
         pt::Loc::Codegen,
         Type::Uint(64),
         // See EIP150
-        if ns.target == Target::Ewasm {
+        if ns.target == Target::EVM {
             BigInt::from(i64::MAX)
         } else {
             BigInt::zero()

+ 2 - 2
src/codegen/mod.rs

@@ -141,8 +141,8 @@ pub fn codegen(ns: &mut Namespace, opt: &Options) {
                 return;
             }
 
-            // Solana creates a single bundle
-            if ns.target != Target::Solana {
+            // Solana creates a single bundle, EVM has no emitter implemented yet
+            if ns.target != Target::Solana && ns.target != Target::EVM {
                 #[cfg(not(feature = "llvm"))]
                 panic!("LLVM feature is not enabled");
                 #[cfg(feature = "llvm")]

+ 18 - 84
src/emit/binary.rs

@@ -11,7 +11,7 @@ use num_traits::ToPrimitive;
 use std::collections::HashMap;
 
 use crate::emit::substrate;
-use crate::emit::{ewasm, solana, BinaryOp, Generate, ReturnCode};
+use crate::emit::{solana, BinaryOp, Generate, ReturnCode};
 use crate::linker::link;
 use crate::Target;
 use inkwell::builder::Builder;
@@ -49,9 +49,7 @@ pub struct Binary<'a> {
     pub(crate) functions: HashMap<usize, FunctionValue<'a>>,
     code: RefCell<Vec<u8>>,
     pub(crate) opt: OptimizationLevel,
-    pub(crate) code_size: RefCell<Option<IntValue<'a>>>,
     pub(crate) selector: GlobalValue<'a>,
-    pub(crate) calldata_data: GlobalValue<'a>,
     pub(crate) calldata_len: GlobalValue<'a>,
     pub(crate) scratch_len: Option<GlobalValue<'a>>,
     pub(crate) scratch: Option<GlobalValue<'a>>,
@@ -82,16 +80,6 @@ impl<'a> Binary<'a> {
                 math_overflow_check,
                 generate_debug_info,
             ),
-            Target::Ewasm => ewasm::EwasmTarget::build(
-                context,
-                &std_lib,
-                contract,
-                ns,
-                filename,
-                opt,
-                math_overflow_check,
-                generate_debug_info,
-            ),
             Target::Solana => solana::SolanaTarget::build(
                 context,
                 &std_lib,
@@ -102,6 +90,7 @@ impl<'a> Binary<'a> {
                 math_overflow_check,
                 generate_debug_info,
             ),
+            Target::EVM => unimplemented!(),
         }
     }
 
@@ -165,40 +154,26 @@ impl<'a> Binary<'a> {
             )
             .unwrap();
 
-        loop {
-            // we need to loop here to support ewasm deployer. It needs to know the size
-            // of itself. Note that in webassembly, the constants are LEB128 encoded so
-            // patching the length might actually change the length. So we need to loop
-            // until it is right.
-
-            // The correct solution is to make ewasm less insane.
-            match target_machine.write_to_memory_buffer(
-                &self.module,
-                if generate == Generate::Assembly {
-                    FileType::Assembly
-                } else {
-                    FileType::Object
-                },
-            ) {
-                Ok(out) => {
-                    let slice = out.as_slice();
-
-                    if generate == Generate::Linked {
-                        let bs = link(slice, &self.name, self.target);
+        match target_machine.write_to_memory_buffer(
+            &self.module,
+            if generate == Generate::Assembly {
+                FileType::Assembly
+            } else {
+                FileType::Object
+            },
+        ) {
+            Ok(out) => {
+                let slice = out.as_slice();
 
-                        if !self.patch_code_size(bs.len() as u64) {
-                            self.code.replace(bs.to_vec());
+                if generate == Generate::Linked {
+                    let bs = link(slice, &self.name, self.target);
 
-                            return Ok(bs.to_vec());
-                        }
-                    } else {
-                        return Ok(slice.to_vec());
-                    }
-                }
-                Err(s) => {
-                    return Err(s.to_string());
+                    Ok(bs.to_vec())
+                } else {
+                    Ok(slice.to_vec())
                 }
             }
+            Err(s) => Err(s.to_string()),
         }
     }
 
@@ -314,19 +289,6 @@ impl<'a> Binary<'a> {
         calldata_len.set_linkage(Linkage::Internal);
         calldata_len.set_initializer(&context.i32_type().const_zero());
 
-        let calldata_data = module.add_global(
-            context.i8_type().ptr_type(AddressSpace::Generic),
-            Some(AddressSpace::Generic),
-            "calldata_data",
-        );
-        calldata_data.set_linkage(Linkage::Internal);
-        calldata_data.set_initializer(
-            &context
-                .i8_type()
-                .ptr_type(AddressSpace::Generic)
-                .const_zero(),
-        );
-
         let mut return_values = HashMap::new();
 
         return_values.insert(ReturnCode::Success, context.i32_type().const_zero());
@@ -355,9 +317,7 @@ impl<'a> Binary<'a> {
             functions: HashMap::new(),
             code: RefCell::new(Vec::new()),
             opt,
-            code_size: RefCell::new(None),
             selector,
-            calldata_data,
             calldata_len,
             scratch: None,
             scratch_len: None,
@@ -926,32 +886,6 @@ impl<'a> Binary<'a> {
         }
     }
 
-    /// ewasm deployer needs to know what its own code size is, so we compile once to
-    /// get the size, patch in the value and then recompile.
-    fn patch_code_size(&self, code_size: u64) -> bool {
-        let current_size = {
-            let current_size_opt = self.code_size.borrow();
-
-            if let Some(current_size) = *current_size_opt {
-                if code_size == current_size.get_zero_extended_constant().unwrap() {
-                    return false;
-                }
-
-                current_size
-            } else {
-                return false;
-            }
-        };
-
-        let new_size = self.context.i32_type().const_int(code_size, false);
-
-        current_size.replace_all_uses_with(new_size);
-
-        self.code_size.replace(Some(new_size));
-
-        true
-    }
-
     /// Allocate vector
     pub(crate) fn vector_new(
         &self,

+ 1 - 1
src/emit/ethabiencoder.rs

@@ -3130,7 +3130,7 @@ impl EthAbiDecoder {
 
         binary.builder.position_at_end(bail_block);
 
-        if ns.target == Target::Ewasm {
+        if ns.target == Target::EVM {
             // TODO: should we pass in a panic message?
             binary.builder.build_call(
                 binary.module.get_function("revert").unwrap(),

+ 0 - 2105
src/emit/ewasm.rs

@@ -1,2105 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use crate::codegen;
-use crate::codegen::cfg::HashTy;
-use crate::sema::ast;
-use solang_parser::pt;
-use std::cell::RefCell;
-use std::collections::HashMap;
-use std::str;
-
-use inkwell::attributes::{Attribute, AttributeLoc};
-use inkwell::context::Context;
-use inkwell::module::{Linkage, Module};
-use inkwell::types::IntType;
-use inkwell::values::{
-    ArrayValue, BasicMetadataValueEnum, BasicValueEnum, FunctionValue, IntValue, PointerValue,
-};
-use inkwell::AddressSpace;
-use inkwell::IntPredicate;
-use inkwell::OptimizationLevel;
-
-use crate::emit::ethabiencoder;
-use crate::emit::Generate;
-use crate::emit::{Binary, TargetRuntime, Variable};
-
-pub struct EwasmTarget {
-    abi: ethabiencoder::EthAbiDecoder,
-}
-
-impl EwasmTarget {
-    pub fn build<'a>(
-        context: &'a Context,
-        std_lib: &Module<'a>,
-        contract: &'a ast::Contract,
-        ns: &'a ast::Namespace,
-        filename: &'a str,
-        opt: OptimizationLevel,
-        math_overflow_check: bool,
-        generate_debug_info: bool,
-    ) -> Binary<'a> {
-        // first emit runtime code
-        let mut b = EwasmTarget {
-            abi: ethabiencoder::EthAbiDecoder { bswap: false },
-        };
-        let mut runtime_code = Binary::new(
-            context,
-            ns.target,
-            &contract.name,
-            filename,
-            opt,
-            math_overflow_check,
-            std_lib,
-            None,
-            generate_debug_info,
-        );
-
-        runtime_code.set_early_value_aborts(contract, ns);
-
-        // externals
-        b.declare_externals(&mut runtime_code);
-
-        // This also emits the constructors. We are relying on DCE to eliminate them from
-        // the final code.
-        b.emit_functions(&mut runtime_code, contract, ns);
-
-        b.function_dispatch(&runtime_code, contract, ns);
-
-        runtime_code.internalize(&["main"]);
-
-        let runtime_bs = runtime_code.code(Generate::Linked).unwrap();
-
-        // Now we have the runtime code, create the deployer
-        let mut b = EwasmTarget {
-            abi: ethabiencoder::EthAbiDecoder { bswap: false },
-        };
-        let mut deploy_code = Binary::new(
-            context,
-            ns.target,
-            &contract.name,
-            filename,
-            opt,
-            math_overflow_check,
-            std_lib,
-            Some(Box::new(runtime_code)),
-            generate_debug_info,
-        );
-
-        deploy_code.set_early_value_aborts(contract, ns);
-
-        // externals
-        b.declare_externals(&mut deploy_code);
-
-        // FIXME: this emits the constructors, as well as the functions. In Ethereum Solidity,
-        // no functions can be called from the constructor. We should either disallow this too
-        // and not emit functions, or use lto linking to optimize any unused functions away.
-        b.emit_functions(&mut deploy_code, contract, ns);
-
-        b.deployer_dispatch(&mut deploy_code, contract, &runtime_bs, ns);
-
-        deploy_code.internalize(&[
-            "main",
-            "getCallDataSize",
-            "callDataCopy",
-            "storageStore",
-            "storageLoad",
-            "finish",
-            "revert",
-            "codeCopy",
-            "getCodeSize",
-            "printMem",
-            "call",
-            "callStatic",
-            "callDelegate",
-            "create",
-            "getReturnDataSize",
-            "returnDataCopy",
-            "getCallValue",
-            "getAddress",
-            "getExternalBalance",
-            "getBlockHash",
-            "getBlockDifficulty",
-            "getGasLeft",
-            "getBlockGasLimit",
-            "getBlockTimestamp",
-            "getBlockNumber",
-            "getTxGasPrice",
-            "getTxOrigin",
-            "getBlockCoinbase",
-            "getCaller",
-            "log",
-            "getExternalCodeSize",
-        ]);
-
-        deploy_code
-    }
-
-    fn runtime_prelude<'a>(
-        &self,
-        binary: &Binary<'a>,
-        function: FunctionValue,
-        ns: &ast::Namespace,
-    ) -> (PointerValue<'a>, IntValue<'a>) {
-        let entry = binary.context.append_basic_block(function, "entry");
-
-        binary.builder.position_at_end(entry);
-
-        // first thing to do is abort value transfers if we're not payable
-        if binary.function_abort_value_transfers {
-            self.abort_if_value_transfer(binary, function, ns);
-        }
-
-        // init our heap
-        binary
-            .builder
-            .build_call(binary.module.get_function("__init_heap").unwrap(), &[], "");
-
-        // copy arguments from scratch buffer
-        let args_length = binary
-            .builder
-            .build_call(
-                binary.module.get_function("getCallDataSize").unwrap(),
-                &[],
-                "calldatasize",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap();
-
-        binary.builder.build_store(
-            binary.calldata_len.as_pointer_value(),
-            args_length.into_int_value(),
-        );
-
-        let args = binary
-            .builder
-            .build_call(
-                binary.module.get_function("__malloc").unwrap(),
-                &[args_length.into()],
-                "",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap()
-            .into_pointer_value();
-
-        binary
-            .builder
-            .build_store(binary.calldata_data.as_pointer_value(), args);
-
-        binary.builder.build_call(
-            binary.module.get_function("callDataCopy").unwrap(),
-            &[
-                args.into(),
-                binary.context.i32_type().const_zero().into(),
-                args_length.into(),
-            ],
-            "",
-        );
-
-        let args = binary.builder.build_pointer_cast(
-            args,
-            binary.context.i32_type().ptr_type(AddressSpace::Generic),
-            "",
-        );
-
-        (args, args_length.into_int_value())
-    }
-
-    fn deployer_prelude<'a>(
-        &self,
-        binary: &mut Binary<'a>,
-        function: FunctionValue,
-        ns: &ast::Namespace,
-    ) -> (PointerValue<'a>, IntValue<'a>) {
-        let entry = binary.context.append_basic_block(function, "entry");
-
-        binary.builder.position_at_end(entry);
-
-        // first thing to do is abort value transfers if constructors not payable
-        if binary.constructor_abort_value_transfers {
-            self.abort_if_value_transfer(binary, function, ns);
-        }
-
-        // init our heap
-        binary
-            .builder
-            .build_call(binary.module.get_function("__init_heap").unwrap(), &[], "");
-
-        // The code_size will need to be patched later
-        let code_size = binary.context.i32_type().const_int(0x4000, false);
-
-        // copy arguments from scratch buffer
-        let args_length = binary.builder.build_int_sub(
-            binary
-                .builder
-                .build_call(
-                    binary.module.get_function("getCodeSize").unwrap(),
-                    &[],
-                    "codesize",
-                )
-                .try_as_basic_value()
-                .left()
-                .unwrap()
-                .into_int_value(),
-            code_size,
-            "",
-        );
-
-        binary
-            .builder
-            .build_store(binary.calldata_len.as_pointer_value(), args_length);
-
-        let args = binary
-            .builder
-            .build_call(
-                binary.module.get_function("__malloc").unwrap(),
-                &[args_length.into()],
-                "",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap()
-            .into_pointer_value();
-
-        binary
-            .builder
-            .build_store(binary.calldata_data.as_pointer_value(), args);
-
-        binary.builder.build_call(
-            binary.module.get_function("codeCopy").unwrap(),
-            &[args.into(), code_size.into(), args_length.into()],
-            "",
-        );
-
-        let args = binary.builder.build_pointer_cast(
-            args,
-            binary.context.i32_type().ptr_type(AddressSpace::Generic),
-            "",
-        );
-
-        binary.code_size = RefCell::new(Some(code_size));
-
-        (args, args_length)
-    }
-
-    fn declare_externals(&self, binary: &mut Binary) {
-        let u8_ptr_ty = binary.context.i8_type().ptr_type(AddressSpace::Generic);
-        let u32_ty = binary.context.i32_type();
-        let u64_ty = binary.context.i64_type();
-        let void_ty = binary.context.void_type();
-
-        let ftype = void_ty.fn_type(&[u8_ptr_ty.into(), u8_ptr_ty.into()], false);
-
-        binary
-            .module
-            .add_function("storageStore", ftype, Some(Linkage::External));
-        binary
-            .module
-            .add_function("storageLoad", ftype, Some(Linkage::External));
-
-        binary.module.add_function(
-            "getCallDataSize",
-            u32_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getCodeSize",
-            u32_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getReturnDataSize",
-            u32_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "callDataCopy",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // resultOffset
-                    u32_ty.into(),    // dataOffset
-                    u32_ty.into(),    // length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "codeCopy",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // resultOffset
-                    u32_ty.into(),    // dataOffset
-                    u32_ty.into(),    // length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "returnDataCopy",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // resultOffset
-                    u32_ty.into(),    // dataOffset
-                    u32_ty.into(),    // length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "printMem",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // string_ptr
-                    u32_ty.into(),    // string_length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "create",
-            u32_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // valueOffset
-                    u8_ptr_ty.into(), // input offset
-                    u32_ty.into(),    // input length
-                    u8_ptr_ty.into(), // address result
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "call",
-            u32_ty.fn_type(
-                &[
-                    u64_ty.into(),    // gas
-                    u8_ptr_ty.into(), // address
-                    u8_ptr_ty.into(), // valueOffset
-                    u8_ptr_ty.into(), // input offset
-                    u32_ty.into(),    // input length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-        binary.module.add_function(
-            "callStatic",
-            u32_ty.fn_type(
-                &[
-                    u64_ty.into(),    // gas
-                    u8_ptr_ty.into(), // address
-                    u8_ptr_ty.into(), // input offset
-                    u32_ty.into(),    // input length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-        binary.module.add_function(
-            "callDelegate",
-            u32_ty.fn_type(
-                &[
-                    u64_ty.into(),    // gas
-                    u8_ptr_ty.into(), // address
-                    u8_ptr_ty.into(), // input offset
-                    u32_ty.into(),    // input length
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-        binary.module.add_function(
-            "getCallValue",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // value_ptr
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getAddress",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // value_ptr
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getCaller",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // value_ptr
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getExternalBalance",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // address_ptr
-                    u8_ptr_ty.into(), // balance_ptr
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getBlockHash",
-            u32_ty.fn_type(
-                &[
-                    u64_ty.into(),    // block number
-                    u8_ptr_ty.into(), // hash_ptr result
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getBlockCoinbase",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // address_ptr result
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getBlockDifficulty",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // u256_ptr result
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getGasLeft",
-            u64_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getBlockGasLimit",
-            u64_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getBlockTimestamp",
-            u64_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getBlockNumber",
-            u64_ty.fn_type(&[], false),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getTxGasPrice",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // value_ptr result
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getTxOrigin",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // address_ptr result
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "log",
-            void_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // data_ptr result
-                    u32_ty.into(),    // data length
-                    u32_ty.into(),    // number of topics
-                    u8_ptr_ty.into(), // topic1
-                    u8_ptr_ty.into(), // topic2
-                    u8_ptr_ty.into(), // topic3
-                    u8_ptr_ty.into(), // topic4
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        binary.module.add_function(
-            "getExternalCodeSize",
-            u32_ty.fn_type(
-                &[
-                    u8_ptr_ty.into(), // address_ptr
-                ],
-                false,
-            ),
-            Some(Linkage::External),
-        );
-
-        let noreturn = binary
-            .context
-            .create_enum_attribute(Attribute::get_named_enum_kind_id("noreturn"), 0);
-
-        // mark as noreturn
-        binary
-            .module
-            .add_function(
-                "finish",
-                void_ty.fn_type(
-                    &[
-                        u8_ptr_ty.into(), // data_ptr
-                        u32_ty.into(),    // data_len
-                    ],
-                    false,
-                ),
-                Some(Linkage::External),
-            )
-            .add_attribute(AttributeLoc::Function, noreturn);
-
-        // mark as noreturn
-        binary
-            .module
-            .add_function(
-                "revert",
-                void_ty.fn_type(
-                    &[
-                        u8_ptr_ty.into(), // data_ptr
-                        u32_ty.into(),    // data_len
-                    ],
-                    false,
-                ),
-                Some(Linkage::External),
-            )
-            .add_attribute(AttributeLoc::Function, noreturn);
-
-        // mark as noreturn
-        binary
-            .module
-            .add_function(
-                "selfDestruct",
-                void_ty.fn_type(
-                    &[
-                        u8_ptr_ty.into(), // address_ptr
-                    ],
-                    false,
-                ),
-                Some(Linkage::External),
-            )
-            .add_attribute(AttributeLoc::Function, noreturn);
-    }
-
-    fn deployer_dispatch(
-        &mut self,
-        binary: &mut Binary,
-        contract: &ast::Contract,
-        runtime: &[u8],
-        ns: &ast::Namespace,
-    ) {
-        let initializer = self.emit_initializer(binary, contract, ns);
-
-        // create start function
-        let ret = binary.context.void_type();
-        let ftype = ret.fn_type(&[], false);
-        let function = binary.module.add_function("main", ftype, None);
-
-        // FIXME: If there is no constructor, do not copy the calldata (but check calldatasize == 0)
-        let (argsdata, length) = self.deployer_prelude(binary, function, ns);
-
-        // init our storage vars
-        binary.builder.build_call(initializer, &[], "");
-
-        // ewasm only allows one constructor, hence find()
-        if let Some((cfg_no, cfg)) = contract
-            .cfg
-            .iter()
-            .enumerate()
-            .find(|(_, cfg)| cfg.ty == pt::FunctionTy::Constructor)
-        {
-            let mut args = Vec::new();
-
-            // insert abi decode
-            self.abi.decode(
-                binary,
-                function,
-                &mut args,
-                argsdata,
-                length,
-                &cfg.params,
-                ns,
-            );
-
-            let args: Vec<BasicMetadataValueEnum> = args.iter().map(|arg| (*arg).into()).collect();
-
-            binary
-                .builder
-                .build_call(binary.functions[&cfg_no], &args, "");
-        }
-
-        // the deploy code should return the runtime wasm code
-        let runtime_code = binary.emit_global_string("runtime_code", runtime, true);
-
-        binary.builder.build_call(
-            binary.module.get_function("finish").unwrap(),
-            &[
-                runtime_code.into(),
-                binary
-                    .context
-                    .i32_type()
-                    .const_int(runtime.len() as u64, false)
-                    .into(),
-            ],
-            "",
-        );
-
-        // since finish is marked noreturn, this should be optimized away
-        // however it is needed to create valid LLVM IR
-        binary.builder.build_unreachable();
-    }
-
-    fn function_dispatch(
-        &mut self,
-        binary: &Binary,
-        contract: &ast::Contract,
-        ns: &ast::Namespace,
-    ) {
-        // create start function
-        let ret = binary.context.void_type();
-        let ftype = ret.fn_type(&[], false);
-        let function = binary.module.add_function("main", ftype, None);
-
-        let (argsdata, argslen) = self.runtime_prelude(binary, function, ns);
-
-        self.emit_function_dispatch(
-            binary,
-            contract,
-            ns,
-            pt::FunctionTy::Function,
-            argsdata,
-            argslen,
-            function,
-            &binary.functions,
-            None,
-            |func| !binary.function_abort_value_transfers && func.nonpayable,
-        );
-    }
-
-    fn encode<'b>(
-        &self,
-        binary: &Binary<'b>,
-        constant: Option<(PointerValue<'b>, u64)>,
-        load: bool,
-        function: FunctionValue<'b>,
-        packed: &[BasicValueEnum<'b>],
-        args: &[BasicValueEnum<'b>],
-        tys: &[ast::Type],
-        ns: &ast::Namespace,
-    ) -> (PointerValue<'b>, IntValue<'b>) {
-        let encoder = ethabiencoder::EncoderBuilder::new(
-            binary, function, load, packed, args, tys, false, ns,
-        );
-
-        let mut length = encoder.encoded_length();
-
-        if let Some((_, len)) = constant {
-            length = binary.builder.build_int_add(
-                length,
-                binary.context.i32_type().const_int(len, false),
-                "",
-            );
-        }
-
-        let encoded_data = binary
-            .builder
-            .build_call(
-                binary.module.get_function("__malloc").unwrap(),
-                &[length.into()],
-                "",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap()
-            .into_pointer_value();
-
-        let mut data = encoded_data;
-
-        if let Some((code, code_len)) = constant {
-            binary.builder.build_call(
-                binary.module.get_function("__memcpy").unwrap(),
-                &[
-                    binary
-                        .builder
-                        .build_pointer_cast(
-                            data,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into(),
-                    code.into(),
-                    binary.context.i32_type().const_int(code_len, false).into(),
-                ],
-                "",
-            );
-
-            data = unsafe {
-                binary.builder.build_gep(
-                    data,
-                    &[binary.context.i32_type().const_int(code_len, false)],
-                    "",
-                )
-            };
-        }
-
-        encoder.finish(binary, function, data, ns);
-
-        (encoded_data, length)
-    }
-}
-
-impl<'a> TargetRuntime<'a> for EwasmTarget {
-    fn storage_delete_single_slot(
-        &self,
-        binary: &Binary,
-        _function: FunctionValue,
-        slot: PointerValue,
-    ) {
-        let value = binary
-            .builder
-            .build_alloca(binary.context.custom_width_int_type(256), "value");
-
-        let value8 = binary.builder.build_pointer_cast(
-            value,
-            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-            "value8",
-        );
-
-        binary.builder.build_call(
-            binary.module.get_function("__bzero8").unwrap(),
-            &[
-                value8.into(),
-                binary.context.i32_type().const_int(4, false).into(),
-            ],
-            "",
-        );
-
-        binary.builder.build_call(
-            binary.module.get_function("storageStore").unwrap(),
-            &[
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        slot,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-                value8.into(),
-            ],
-            "",
-        );
-    }
-
-    fn set_storage_string(
-        &self,
-        _binary: &Binary<'a>,
-        _function: FunctionValue<'a>,
-        _slot: PointerValue<'a>,
-        _dest: BasicValueEnum<'a>,
-    ) {
-        unimplemented!();
-    }
-
-    fn get_storage_string(
-        &self,
-        _binary: &Binary<'a>,
-        _function: FunctionValue,
-        _slot: PointerValue,
-    ) -> PointerValue<'a> {
-        unimplemented!();
-    }
-    fn set_storage_extfunc(
-        &self,
-        _binary: &Binary,
-        _function: FunctionValue,
-        _slot: PointerValue,
-        _dest: PointerValue,
-    ) {
-        unimplemented!();
-    }
-    fn get_storage_extfunc(
-        &self,
-        _binary: &Binary<'a>,
-        _function: FunctionValue,
-        _slot: PointerValue<'a>,
-        _ns: &ast::Namespace,
-    ) -> PointerValue<'a> {
-        unimplemented!();
-    }
-    fn get_storage_bytes_subscript(
-        &self,
-        _binary: &Binary<'a>,
-        _function: FunctionValue,
-        _slot: IntValue<'a>,
-        _index: IntValue<'a>,
-    ) -> IntValue<'a> {
-        unimplemented!();
-    }
-    fn set_storage_bytes_subscript(
-        &self,
-        _binary: &Binary,
-        _function: FunctionValue,
-        _slot: IntValue,
-        _index: IntValue,
-        _val: IntValue,
-    ) {
-        unimplemented!();
-    }
-    fn storage_push(
-        &self,
-        _binary: &Binary<'a>,
-        _function: FunctionValue,
-        _ty: &ast::Type,
-        _slot: IntValue<'a>,
-        _val: Option<BasicValueEnum<'a>>,
-        _ns: &ast::Namespace,
-    ) -> BasicValueEnum<'a> {
-        unimplemented!();
-    }
-    fn storage_pop(
-        &self,
-        _binary: &Binary<'a>,
-        _function: FunctionValue<'a>,
-        _ty: &ast::Type,
-        _slot: IntValue<'a>,
-        _load: bool,
-        _ns: &ast::Namespace,
-    ) -> Option<BasicValueEnum<'a>> {
-        unimplemented!();
-    }
-
-    fn set_storage(
-        &self,
-        binary: &Binary,
-        _function: FunctionValue,
-        slot: PointerValue,
-        dest: PointerValue,
-    ) {
-        if !dest.get_type().get_element_type().is_array_type()
-            && dest
-                .get_type()
-                .get_element_type()
-                .into_int_type()
-                .get_bit_width()
-                == 256
-        {
-            binary.builder.build_call(
-                binary.module.get_function("storageStore").unwrap(),
-                &[
-                    binary
-                        .builder
-                        .build_pointer_cast(
-                            slot,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into(),
-                    binary
-                        .builder
-                        .build_pointer_cast(
-                            dest,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into(),
-                ],
-                "",
-            );
-        } else {
-            let value = binary
-                .builder
-                .build_alloca(binary.context.custom_width_int_type(256), "value");
-
-            let value8 = binary.builder.build_pointer_cast(
-                value,
-                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                "value8",
-            );
-
-            binary.builder.build_call(
-                binary.module.get_function("__bzero8").unwrap(),
-                &[
-                    value8.into(),
-                    binary.context.i32_type().const_int(4, false).into(),
-                ],
-                "",
-            );
-
-            let val = binary.builder.build_load(dest, "value");
-
-            binary.builder.build_store(
-                binary
-                    .builder
-                    .build_pointer_cast(value, dest.get_type(), ""),
-                val,
-            );
-
-            binary.builder.build_call(
-                binary.module.get_function("storageStore").unwrap(),
-                &[
-                    binary
-                        .builder
-                        .build_pointer_cast(
-                            slot,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into(),
-                    value8.into(),
-                ],
-                "",
-            );
-        }
-    }
-
-    fn get_storage_int(
-        &self,
-        binary: &Binary<'a>,
-        _function: FunctionValue,
-        slot: PointerValue<'a>,
-        ty: IntType<'a>,
-    ) -> IntValue<'a> {
-        let dest = binary.builder.build_array_alloca(
-            binary.context.i8_type(),
-            binary.context.i32_type().const_int(32, false),
-            "buf",
-        );
-
-        binary.builder.build_call(
-            binary.module.get_function("storageLoad").unwrap(),
-            &[
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        slot,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        dest,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-            ],
-            "",
-        );
-
-        binary
-            .builder
-            .build_load(
-                binary
-                    .builder
-                    .build_pointer_cast(dest, ty.ptr_type(AddressSpace::Generic), ""),
-                "loaded_int",
-            )
-            .into_int_value()
-    }
-
-    fn get_storage_address(
-        &self,
-        binary: &Binary<'a>,
-        _function: FunctionValue,
-        slot: PointerValue<'a>,
-        ns: &ast::Namespace,
-    ) -> ArrayValue<'a> {
-        let dest = binary.builder.build_array_alloca(
-            binary.context.i8_type(),
-            binary.context.i32_type().const_int(32, false),
-            "buf",
-        );
-
-        binary.builder.build_call(
-            binary.module.get_function("storageLoad").unwrap(),
-            &[
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        slot,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        dest,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-            ],
-            "",
-        );
-
-        binary
-            .builder
-            .build_load(
-                binary.builder.build_pointer_cast(
-                    dest,
-                    binary.address_type(ns).ptr_type(AddressSpace::Generic),
-                    "",
-                ),
-                "loaded_address",
-            )
-            .into_array_value()
-    }
-
-    /// ewasm has no keccak256 host function, so call our implementation
-    fn keccak256_hash(
-        &self,
-        binary: &Binary,
-        src: PointerValue,
-        length: IntValue,
-        dest: PointerValue,
-        ns: &ast::Namespace,
-    ) {
-        let balance = binary
-            .builder
-            .build_alloca(binary.value_type(ns), "balance");
-
-        binary
-            .builder
-            .build_store(balance, binary.value_type(ns).const_zero());
-
-        let keccak256_pre_compile_address: [u8; 20] =
-            [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20];
-
-        let address =
-            binary.emit_global_string("keccak256_precompile", &keccak256_pre_compile_address, true);
-
-        binary.builder.build_call(
-            binary.module.get_function("call").unwrap(),
-            &[
-                binary
-                    .context
-                    .i64_type()
-                    .const_int(i64::MAX as u64, false)
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        address,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "address",
-                    )
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        balance,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "balance",
-                    )
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        src,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "source",
-                    )
-                    .into(),
-                length.into(),
-            ],
-            "",
-        );
-
-        // We're not checking return value or returnDataSize;
-        // assuming precompiles always succeed
-        binary.builder.build_call(
-            binary.module.get_function("returnDataCopy").unwrap(),
-            &[
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        dest,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "dest",
-                    )
-                    .into(),
-                binary.context.i32_type().const_zero().into(),
-                binary.context.i32_type().const_int(32, false).into(),
-            ],
-            "",
-        );
-    }
-
-    fn return_empty_abi(&self, binary: &Binary) {
-        binary.builder.build_call(
-            binary.module.get_function("finish").unwrap(),
-            &[
-                binary
-                    .context
-                    .i8_type()
-                    .ptr_type(AddressSpace::Generic)
-                    .const_zero()
-                    .into(),
-                binary.context.i32_type().const_zero().into(),
-            ],
-            "",
-        );
-
-        // since finish is marked noreturn, this should be optimized away
-        // however it is needed to create valid LLVM IR
-        binary.builder.build_unreachable();
-    }
-
-    fn return_abi<'b>(&self, binary: &'b Binary, data: PointerValue<'b>, length: IntValue) {
-        binary.builder.build_call(
-            binary.module.get_function("finish").unwrap(),
-            &[data.into(), length.into()],
-            "",
-        );
-
-        // since finish is marked noreturn, this should be optimized away
-        // however it is needed to create valid LLVM IR
-        binary.builder.build_unreachable();
-    }
-
-    // ewasm main cannot return any value
-    fn return_code<'b>(&self, binary: &'b Binary, _ret: IntValue<'b>) {
-        self.assert_failure(
-            binary,
-            binary
-                .context
-                .i8_type()
-                .ptr_type(AddressSpace::Generic)
-                .const_null(),
-            binary.context.i32_type().const_zero(),
-        );
-    }
-
-    fn assert_failure<'b>(&self, binary: &'b Binary, data: PointerValue, len: IntValue) {
-        binary.builder.build_call(
-            binary.module.get_function("revert").unwrap(),
-            &[data.into(), len.into()],
-            "",
-        );
-
-        // since revert is marked noreturn, this should be optimized away
-        // however it is needed to create valid LLVM IR
-        binary.builder.build_unreachable();
-    }
-
-    /// ABI encode into a vector for abi.encode* style builtin functions
-    fn abi_encode_to_vector<'b>(
-        &self,
-        binary: &Binary<'b>,
-        function: FunctionValue<'b>,
-        packed: &[BasicValueEnum<'b>],
-        args: &[BasicValueEnum<'b>],
-        tys: &[ast::Type],
-        ns: &ast::Namespace,
-    ) -> PointerValue<'b> {
-        ethabiencoder::encode_to_vector(binary, function, packed, args, tys, false, ns)
-    }
-
-    fn abi_encode<'b>(
-        &self,
-        binary: &Binary<'b>,
-        selector: Option<IntValue<'b>>,
-        load: bool,
-        function: FunctionValue<'b>,
-        args: &[BasicValueEnum<'b>],
-        tys: &[ast::Type],
-        ns: &ast::Namespace,
-    ) -> (PointerValue<'b>, IntValue<'b>) {
-        let mut tys = tys.to_vec();
-
-        let packed = if let Some(selector) = selector {
-            tys.insert(0, ast::Type::Uint(32));
-            vec![selector.into()]
-        } else {
-            vec![]
-        };
-
-        self.encode(binary, None, load, function, &packed, args, &tys, ns)
-    }
-
-    fn abi_decode<'b>(
-        &self,
-        binary: &Binary<'b>,
-        function: FunctionValue<'b>,
-        args: &mut Vec<BasicValueEnum<'b>>,
-        data: PointerValue<'b>,
-        length: IntValue<'b>,
-        spec: &[ast::Parameter],
-        ns: &ast::Namespace,
-    ) {
-        self.abi
-            .decode(binary, function, args, data, length, spec, ns);
-    }
-
-    fn print(&self, binary: &Binary, string_ptr: PointerValue, string_len: IntValue) {
-        binary.builder.build_call(
-            binary.module.get_function("printMem").unwrap(),
-            &[string_ptr.into(), string_len.into()],
-            "",
-        );
-    }
-
-    fn create_contract<'b>(
-        &mut self,
-        binary: &Binary<'b>,
-        function: FunctionValue<'b>,
-        success: Option<&mut BasicValueEnum<'b>>,
-        contract_no: usize,
-        constructor_no: Option<usize>,
-        address: PointerValue<'b>,
-        args: &[BasicValueEnum<'b>],
-        _gas: IntValue<'b>,
-        value: Option<IntValue<'b>>,
-        _salt: Option<IntValue<'b>>,
-        _space: Option<IntValue<'b>>,
-        ns: &ast::Namespace,
-    ) {
-        let resolver_binary = &ns.contracts[contract_no];
-
-        let target_binary = Binary::build(
-            binary.context,
-            resolver_binary,
-            ns,
-            "",
-            binary.opt,
-            binary.math_overflow_check,
-            binary.generate_debug_info,
-        );
-
-        // wasm
-        let wasm = target_binary
-            .code(Generate::Linked)
-            .expect("compile should succeeed");
-
-        let code = binary.emit_global_string(
-            &format!("contract_{}_code", resolver_binary.name),
-            &wasm,
-            true,
-        );
-
-        let tys: Vec<ast::Type> = match constructor_no {
-            Some(function_no) => ns.functions[function_no]
-                .params
-                .iter()
-                .map(|p| p.ty.clone())
-                .collect(),
-            None => Vec::new(),
-        };
-
-        // input
-        let (input, input_len) = self.encode(
-            binary,
-            Some((code, wasm.len() as u64)),
-            false,
-            function,
-            &[],
-            args,
-            &tys,
-            ns,
-        );
-
-        // value is a u128
-        let value_ptr = binary
-            .builder
-            .build_alloca(binary.value_type(ns), "balance");
-
-        binary.builder.build_store(
-            value_ptr,
-            match value {
-                Some(v) => v,
-                None => binary.value_type(ns).const_zero(),
-            },
-        );
-
-        // call create
-        let ret = binary
-            .builder
-            .build_call(
-                binary.module.get_function("create").unwrap(),
-                &[
-                    binary
-                        .builder
-                        .build_pointer_cast(
-                            value_ptr,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "value_transfer",
-                        )
-                        .into(),
-                    input.into(),
-                    input_len.into(),
-                    binary
-                        .builder
-                        .build_pointer_cast(
-                            address,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "address",
-                        )
-                        .into(),
-                ],
-                "",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap()
-            .into_int_value();
-
-        let is_success = binary.builder.build_int_compare(
-            IntPredicate::EQ,
-            ret,
-            binary.context.i32_type().const_zero(),
-            "success",
-        );
-
-        if let Some(success) = success {
-            *success = is_success.into();
-        } else {
-            let success_block = binary.context.append_basic_block(function, "success");
-            let bail_block = binary.context.append_basic_block(function, "bail");
-            binary
-                .builder
-                .build_conditional_branch(is_success, success_block, bail_block);
-
-            binary.builder.position_at_end(bail_block);
-
-            self.assert_failure(
-                binary,
-                binary
-                    .context
-                    .i8_type()
-                    .ptr_type(AddressSpace::Generic)
-                    .const_null(),
-                binary.context.i32_type().const_zero(),
-            );
-
-            binary.builder.position_at_end(success_block);
-        }
-    }
-
-    fn external_call<'b>(
-        &self,
-        binary: &Binary<'b>,
-        function: FunctionValue<'b>,
-        success: Option<&mut BasicValueEnum<'b>>,
-        payload: PointerValue<'b>,
-        payload_len: IntValue<'b>,
-        address: Option<PointerValue<'b>>,
-        gas: IntValue<'b>,
-        value: IntValue<'b>,
-        _accounts: Option<(PointerValue<'b>, IntValue<'b>)>,
-        _seeds: Option<(PointerValue<'b>, IntValue<'b>)>,
-        callty: ast::CallTy,
-        ns: &ast::Namespace,
-    ) {
-        let ret = if callty == ast::CallTy::Regular {
-            // needs value
-
-            // value is a u128
-            let value_ptr = binary
-                .builder
-                .build_alloca(binary.value_type(ns), "balance");
-            binary.builder.build_store(value_ptr, value);
-
-            // call create
-            binary
-                .builder
-                .build_call(
-                    binary.module.get_function("call").unwrap(),
-                    &[
-                        gas.into(),
-                        binary
-                            .builder
-                            .build_pointer_cast(
-                                address.unwrap(),
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "address",
-                            )
-                            .into(),
-                        binary
-                            .builder
-                            .build_pointer_cast(
-                                value_ptr,
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "value_transfer",
-                            )
-                            .into(),
-                        payload.into(),
-                        payload_len.into(),
-                    ],
-                    "",
-                )
-                .try_as_basic_value()
-                .left()
-                .unwrap()
-                .into_int_value()
-        } else {
-            binary
-                .builder
-                .build_call(
-                    binary
-                        .module
-                        .get_function(match callty {
-                            ast::CallTy::Regular => "call",
-                            ast::CallTy::Static => "callStatic",
-                            ast::CallTy::Delegate => "callDelegate",
-                        })
-                        .unwrap(),
-                    &[
-                        gas.into(),
-                        binary
-                            .builder
-                            .build_pointer_cast(
-                                address.unwrap(),
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "address",
-                            )
-                            .into(),
-                        payload.into(),
-                        payload_len.into(),
-                    ],
-                    "",
-                )
-                .try_as_basic_value()
-                .left()
-                .unwrap()
-                .into_int_value()
-        };
-
-        let is_success = binary.builder.build_int_compare(
-            IntPredicate::EQ,
-            ret,
-            binary.context.i32_type().const_zero(),
-            "success",
-        );
-
-        if let Some(success) = success {
-            *success = is_success.into();
-        } else {
-            let success_block = binary.context.append_basic_block(function, "success");
-            let bail_block = binary.context.append_basic_block(function, "bail");
-            binary
-                .builder
-                .build_conditional_branch(is_success, success_block, bail_block);
-
-            binary.builder.position_at_end(bail_block);
-
-            self.assert_failure(
-                binary,
-                binary
-                    .context
-                    .i8_type()
-                    .ptr_type(AddressSpace::Generic)
-                    .const_null(),
-                binary.context.i32_type().const_zero(),
-            );
-
-            binary.builder.position_at_end(success_block);
-        }
-    }
-
-    fn return_data<'b>(&self, binary: &Binary<'b>, _function: FunctionValue) -> PointerValue<'b> {
-        let length = binary
-            .builder
-            .build_call(
-                binary.module.get_function("getReturnDataSize").unwrap(),
-                &[],
-                "returndatasize",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap()
-            .into_int_value();
-
-        let malloc_length = binary.builder.build_int_add(
-            length,
-            binary
-                .module
-                .get_struct_type("struct.vector")
-                .unwrap()
-                .size_of()
-                .unwrap()
-                .const_cast(binary.context.i32_type(), false),
-            "size",
-        );
-
-        let p = binary
-            .builder
-            .build_call(
-                binary.module.get_function("__malloc").unwrap(),
-                &[malloc_length.into()],
-                "",
-            )
-            .try_as_basic_value()
-            .left()
-            .unwrap()
-            .into_pointer_value();
-
-        let v = binary.builder.build_pointer_cast(
-            p,
-            binary
-                .module
-                .get_struct_type("struct.vector")
-                .unwrap()
-                .ptr_type(AddressSpace::Generic),
-            "string",
-        );
-
-        let data_len = unsafe {
-            binary.builder.build_gep(
-                v,
-                &[
-                    binary.context.i32_type().const_zero(),
-                    binary.context.i32_type().const_zero(),
-                ],
-                "data_len",
-            )
-        };
-
-        binary.builder.build_store(data_len, length);
-
-        let data_size = unsafe {
-            binary.builder.build_gep(
-                v,
-                &[
-                    binary.context.i32_type().const_zero(),
-                    binary.context.i32_type().const_int(1, false),
-                ],
-                "data_size",
-            )
-        };
-
-        binary.builder.build_store(data_size, length);
-
-        let data = unsafe {
-            binary.builder.build_gep(
-                v,
-                &[
-                    binary.context.i32_type().const_zero(),
-                    binary.context.i32_type().const_int(2, false),
-                ],
-                "data",
-            )
-        };
-
-        binary.builder.build_call(
-            binary.module.get_function("returnDataCopy").unwrap(),
-            &[
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        data,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-                binary.context.i32_type().const_zero().into(),
-                length.into(),
-            ],
-            "",
-        );
-
-        v
-    }
-
-    /// ewasm value is always 128 bits
-    fn value_transferred<'b>(&self, binary: &Binary<'b>, ns: &ast::Namespace) -> IntValue<'b> {
-        let value = binary
-            .builder
-            .build_alloca(binary.value_type(ns), "value_transferred");
-
-        binary.builder.build_call(
-            binary.module.get_function("getCallValue").unwrap(),
-            &[binary
-                .builder
-                .build_pointer_cast(
-                    value,
-                    binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                    "",
-                )
-                .into()],
-            "value_transferred",
-        );
-
-        binary
-            .builder
-            .build_load(value, "value_transferred")
-            .into_int_value()
-    }
-
-    /// Terminate execution, destroy binary and send remaining funds to addr
-    fn selfdestruct<'b>(&self, binary: &Binary<'b>, addr: ArrayValue<'b>, ns: &ast::Namespace) {
-        let address = binary
-            .builder
-            .build_alloca(binary.address_type(ns), "address");
-
-        binary.builder.build_store(address, addr);
-
-        binary.builder.build_call(
-            binary.module.get_function("selfDestruct").unwrap(),
-            &[binary
-                .builder
-                .build_pointer_cast(
-                    address,
-                    binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                    "",
-                )
-                .into()],
-            "terminated",
-        );
-
-        binary.builder.build_unreachable();
-    }
-
-    /// Crypto Hash
-    fn hash<'b>(
-        &self,
-        binary: &Binary<'b>,
-        _function: FunctionValue<'b>,
-        hash: HashTy,
-        input: PointerValue<'b>,
-        input_len: IntValue<'b>,
-        ns: &ast::Namespace,
-    ) -> IntValue<'b> {
-        let (precompile, hashlen) = match hash {
-            HashTy::Keccak256 => (
-                [
-                    0u8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
-                ],
-                32,
-            ),
-            HashTy::Ripemd160 => (
-                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3],
-                20,
-            ),
-            HashTy::Sha256 => (
-                [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
-                32,
-            ),
-            _ => unreachable!(),
-        };
-
-        let res = binary.builder.build_array_alloca(
-            binary.context.i8_type(),
-            binary.context.i32_type().const_int(hashlen, false),
-            "res",
-        );
-
-        let balance = binary
-            .builder
-            .build_alloca(binary.value_type(ns), "balance");
-
-        binary
-            .builder
-            .build_store(balance, binary.value_type(ns).const_zero());
-
-        let address = binary.emit_global_string("precompile", &precompile, true);
-
-        binary.builder.build_call(
-            binary.module.get_function("call").unwrap(),
-            &[
-                binary
-                    .context
-                    .i64_type()
-                    .const_int(i64::MAX as u64, false)
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        address,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "address",
-                    )
-                    .into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        balance,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "balance",
-                    )
-                    .into(),
-                input.into(),
-                input_len.into(),
-            ],
-            "",
-        );
-
-        // We're not checking return value or returnDataSize;
-        // assuming precompiles always succeed
-
-        binary.builder.build_call(
-            binary.module.get_function("returnDataCopy").unwrap(),
-            &[
-                res.into(),
-                binary.context.i32_type().const_zero().into(),
-                binary.context.i32_type().const_int(hashlen, false).into(),
-            ],
-            "",
-        );
-
-        // bytes32 needs to reverse bytes
-        let temp = binary.builder.build_alloca(
-            binary.llvm_type(&ast::Type::Bytes(hashlen as u8), ns),
-            "hash",
-        );
-
-        binary.builder.build_call(
-            binary.module.get_function("__beNtoleN").unwrap(),
-            &[
-                res.into(),
-                binary
-                    .builder
-                    .build_pointer_cast(
-                        temp,
-                        binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                        "",
-                    )
-                    .into(),
-                binary.context.i32_type().const_int(hashlen, false).into(),
-            ],
-            "",
-        );
-
-        binary.builder.build_load(temp, "hash").into_int_value()
-    }
-
-    /// Emit event
-    fn emit_event<'b>(
-        &self,
-        binary: &Binary<'b>,
-        _contract: &ast::Contract,
-        function: FunctionValue<'b>,
-        _event_no: usize,
-        data: &[BasicValueEnum<'b>],
-        data_tys: &[ast::Type],
-        topics: &[BasicValueEnum<'b>],
-        topic_tys: &[ast::Type],
-        ns: &ast::Namespace,
-    ) {
-        let (data_ptr, data_len) =
-            self.abi_encode(binary, None, false, function, data, data_tys, ns);
-
-        let (mut topic_ptr, _) =
-            self.abi_encode(binary, None, false, function, topics, topic_tys, ns);
-
-        let empty_topic = binary
-            .context
-            .i8_type()
-            .ptr_type(AddressSpace::Generic)
-            .const_null();
-
-        let mut topic_ptrs = [empty_topic; 4];
-
-        #[allow(clippy::needless_range_loop)]
-        for topic_no in 0..topics.len() {
-            topic_ptrs[topic_no] = topic_ptr;
-
-            topic_ptr = unsafe {
-                binary.builder.build_gep(
-                    topic_ptr,
-                    &[binary.context.i32_type().const_int(32, false)],
-                    "next_topic",
-                )
-            };
-        }
-
-        binary.builder.build_call(
-            binary.module.get_function("log").unwrap(),
-            &[
-                data_ptr.into(),
-                data_len.into(),
-                binary
-                    .context
-                    .i32_type()
-                    .const_int(topics.len() as u64, false)
-                    .into(),
-                topic_ptrs[0].into(),
-                topic_ptrs[1].into(),
-                topic_ptrs[2].into(),
-                topic_ptrs[3].into(),
-            ],
-            "",
-        );
-    }
-
-    /// builtin expressions
-    fn builtin<'b>(
-        &self,
-        binary: &Binary<'b>,
-        expr: &codegen::Expression,
-        vartab: &HashMap<usize, Variable<'b>>,
-        function: FunctionValue<'b>,
-        ns: &ast::Namespace,
-    ) -> BasicValueEnum<'b> {
-        macro_rules! straight_call {
-            ($name:literal, $func:literal) => {{
-                binary
-                    .builder
-                    .build_call(binary.module.get_function($func).unwrap(), &[], $name)
-                    .try_as_basic_value()
-                    .left()
-                    .unwrap()
-            }};
-        }
-
-        macro_rules! single_int_stack {
-            ($name:literal, $func:literal, $width:expr) => {{
-                let value = binary
-                    .builder
-                    .build_alloca(binary.context.custom_width_int_type($width), $name);
-
-                binary.builder.build_call(
-                    binary.module.get_function($func).unwrap(),
-                    &[binary
-                        .builder
-                        .build_pointer_cast(
-                            value,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into()],
-                    $name,
-                );
-
-                binary.builder.build_load(value, $name)
-            }};
-        }
-
-        macro_rules! single_address_stack {
-            ($name:literal, $func:literal) => {{
-                let value = binary.builder.build_alloca(binary.address_type(ns), $name);
-
-                binary.builder.build_call(
-                    binary.module.get_function($func).unwrap(),
-                    &[binary
-                        .builder
-                        .build_pointer_cast(
-                            value,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into()],
-                    $name,
-                );
-
-                binary.builder.build_load(value, $name)
-            }};
-        }
-
-        match expr {
-            codegen::Expression::Builtin(_, _, codegen::Builtin::BlockNumber, _) => {
-                straight_call!("block_number", "getBlockNumber")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Gasleft, _) => {
-                straight_call!("gas_left", "getGasLeft")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::GasLimit, _) => {
-                straight_call!("gas_limit", "getBlockGasLimit")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Timestamp, _) => {
-                straight_call!("time_stamp", "getBlockTimestamp")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::BlockDifficulty, _) => {
-                single_int_stack!("block_difficulty", "getBlockDifficulty", 256)
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Origin, _) => {
-                single_address_stack!("origin", "getTxOrigin")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Sender, _) => {
-                single_address_stack!("caller", "getCaller")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::BlockCoinbase, _) => {
-                single_address_stack!("coinbase", "getBlockCoinbase")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Gasprice, _) => {
-                single_int_stack!("gas_price", "getTxGasPrice", ns.value_length as u32 * 8)
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Value, _) => {
-                single_int_stack!("value", "getCallValue", ns.value_length as u32 * 8)
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Calldata, _) => binary
-                .builder
-                .build_call(
-                    binary.module.get_function("vector_new").unwrap(),
-                    &[
-                        binary
-                            .builder
-                            .build_load(binary.calldata_len.as_pointer_value(), "calldata_len")
-                            .into(),
-                        binary.context.i32_type().const_int(1, false).into(),
-                        binary
-                            .builder
-                            .build_load(binary.calldata_data.as_pointer_value(), "calldata_data")
-                            .into(),
-                    ],
-                    "",
-                )
-                .try_as_basic_value()
-                .left()
-                .unwrap(),
-            codegen::Expression::Builtin(_, _, codegen::Builtin::BlockHash, args) => {
-                let block_number = self.expression(binary, &args[0], vartab, function, ns);
-
-                let value = binary
-                    .builder
-                    .build_alloca(binary.context.custom_width_int_type(256), "block_hash");
-
-                binary.builder.build_call(
-                    binary.module.get_function("getBlockHash").unwrap(),
-                    &[
-                        block_number.into(),
-                        binary
-                            .builder
-                            .build_pointer_cast(
-                                value,
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "",
-                            )
-                            .into(),
-                    ],
-                    "block_hash",
-                );
-
-                binary.builder.build_load(value, "block_hash")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::GetAddress, _) => {
-                let value = binary
-                    .builder
-                    .build_alloca(binary.address_type(ns), "self_address");
-
-                binary.builder.build_call(
-                    binary.module.get_function("getAddress").unwrap(),
-                    &[binary
-                        .builder
-                        .build_pointer_cast(
-                            value,
-                            binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                            "",
-                        )
-                        .into()],
-                    "self_address",
-                );
-
-                binary.builder.build_load(value, "self_address")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::Balance, addr) => {
-                let addr = self
-                    .expression(binary, &addr[0], vartab, function, ns)
-                    .into_array_value();
-
-                let address = binary
-                    .builder
-                    .build_alloca(binary.address_type(ns), "address");
-
-                binary.builder.build_store(address, addr);
-
-                let balance = binary
-                    .builder
-                    .build_alloca(binary.value_type(ns), "balance");
-
-                binary.builder.build_call(
-                    binary.module.get_function("getExternalBalance").unwrap(),
-                    &[
-                        binary
-                            .builder
-                            .build_pointer_cast(
-                                address,
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "",
-                            )
-                            .into(),
-                        binary
-                            .builder
-                            .build_pointer_cast(
-                                balance,
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "",
-                            )
-                            .into(),
-                    ],
-                    "balance",
-                );
-
-                binary.builder.build_load(balance, "balance")
-            }
-            codegen::Expression::Builtin(_, _, codegen::Builtin::ExtCodeSize, addr) => {
-                let addr = self
-                    .expression(binary, &addr[0], vartab, function, ns)
-                    .into_array_value();
-
-                let address = binary
-                    .builder
-                    .build_alloca(binary.address_type(ns), "address");
-
-                binary.builder.build_store(address, addr);
-
-                binary
-                    .builder
-                    .build_call(
-                        binary.module.get_function("getExternalCodeSize").unwrap(),
-                        &[binary
-                            .builder
-                            .build_pointer_cast(
-                                address,
-                                binary.context.i8_type().ptr_type(AddressSpace::Generic),
-                                "",
-                            )
-                            .into()],
-                        "code_size",
-                    )
-                    .try_as_basic_value()
-                    .left()
-                    .unwrap()
-            }
-            _ => unimplemented!("{:?}", expr),
-        }
-    }
-}

+ 0 - 1
src/emit/mod.rs

@@ -34,7 +34,6 @@ use solang_parser::pt::{CodeLocation, Loc};
 
 pub mod binary;
 mod ethabiencoder;
-pub mod ewasm;
 mod loop_builder;
 pub mod solana;
 pub mod substrate;

+ 5 - 5
src/lib.rs

@@ -32,8 +32,8 @@ pub enum Target {
         address_length: usize,
         value_length: usize,
     },
-    /// Ethereum ewasm, see <https://github.com/ewasm/design>
-    Ewasm,
+    /// Ethereum EVM, see <https://ethereum.org/en/developers/docs/evm/>
+    EVM,
 }
 
 impl fmt::Display for Target {
@@ -41,7 +41,7 @@ impl fmt::Display for Target {
         match self {
             Target::Solana => write!(f, "solana"),
             Target::Substrate { .. } => write!(f, "substrate"),
-            Target::Ewasm => write!(f, "ewasm"),
+            Target::EVM => write!(f, "evm"),
         }
     }
 }
@@ -53,7 +53,7 @@ impl PartialEq for Target {
         match self {
             Target::Solana => matches!(other, Target::Solana),
             Target::Substrate { .. } => matches!(other, Target::Substrate { .. }),
-            Target::Ewasm => matches!(other, Target::Ewasm),
+            Target::EVM => matches!(other, Target::EVM),
         }
     }
 }
@@ -77,7 +77,7 @@ impl Target {
         match name {
             "solana" => Some(Target::Solana),
             "substrate" => Some(Target::default_substrate()),
-            "ewasm" => Some(Target::Ewasm),
+            "evm" => Some(Target::EVM),
             _ => None,
         }
     }

+ 1 - 1
src/linker/mod.rs

@@ -19,7 +19,7 @@ pub fn link(input: &[u8], name: &str, target: Target) -> Vec<u8> {
     if target == Target::Solana {
         bpf::link(input, name)
     } else {
-        wasm::link(input, name, target)
+        wasm::link(input, name)
     }
 }
 

+ 11 - 35
src/linker/wasm.rs

@@ -1,6 +1,5 @@
 // SPDX-License-Identifier: Apache-2.0
 
-use crate::Target;
 use parity_wasm::builder;
 use parity_wasm::elements::{InitExpr, Instruction, Module};
 use std::ffi::CString;
@@ -9,7 +8,7 @@ use std::io::Read;
 use std::io::Write;
 use tempfile::tempdir;
 
-pub fn link(input: &[u8], name: &str, target: Target) -> Vec<u8> {
+pub fn link(input: &[u8], name: &str) -> Vec<u8> {
     let dir = tempdir().expect("failed to create temp directory for linking");
 
     let object_filename = dir.path().join(&format!("{}.o", name));
@@ -30,23 +29,14 @@ pub fn link(input: &[u8], name: &str, target: Target) -> Vec<u8> {
         CString::new("--global-base=0").unwrap(),
     ];
 
-    match target {
-        Target::Ewasm => {
-            command_line.push(CString::new("--export").unwrap());
-            command_line.push(CString::new("main").unwrap());
-        }
-        Target::Substrate { .. } => {
-            command_line.push(CString::new("--export").unwrap());
-            command_line.push(CString::new("deploy").unwrap());
-            command_line.push(CString::new("--export").unwrap());
-            command_line.push(CString::new("call").unwrap());
-
-            command_line.push(CString::new("--import-memory").unwrap());
-            command_line.push(CString::new("--initial-memory=1048576").unwrap());
-            command_line.push(CString::new("--max-memory=1048576").unwrap());
-        }
-        _ => (),
-    }
+    command_line.push(CString::new("--export").unwrap());
+    command_line.push(CString::new("deploy").unwrap());
+    command_line.push(CString::new("--export").unwrap());
+    command_line.push(CString::new("call").unwrap());
+
+    command_line.push(CString::new("--import-memory").unwrap());
+    command_line.push(CString::new("--initial-memory=1048576").unwrap());
+    command_line.push(CString::new("--max-memory=1048576").unwrap());
 
     command_line.push(
         CString::new(
@@ -78,22 +68,8 @@ pub fn link(input: &[u8], name: &str, target: Target) -> Vec<u8> {
         let mut ind = 0;
 
         while ind < imports.len() {
-            match target {
-                Target::Ewasm => {
-                    let module_name = if imports[ind].field().starts_with("print") {
-                        "debug"
-                    } else {
-                        "ethereum"
-                    };
-
-                    *imports[ind].module_mut() = module_name.to_owned();
-                }
-                Target::Substrate { .. } => {
-                    if imports[ind].field().starts_with("seal") {
-                        *imports[ind].module_mut() = "seal0".to_owned();
-                    }
-                }
-                _ => (),
+            if imports[ind].field().starts_with("seal") {
+                *imports[ind].module_mut() = "seal0".to_owned();
             }
 
             ind += 1;

+ 8 - 8
src/sema/builtin.rs

@@ -106,7 +106,7 @@ static BUILTIN_FUNCTIONS: Lazy<[Prototype; 28]> = Lazy::new(|| {
             name: "selfdestruct",
             params: vec![Type::Address(true)],
             ret: vec![Type::Unreachable],
-            target: vec![Target::Ewasm, Target::default_substrate()],
+            target: vec![Target::EVM, Target::default_substrate()],
             doc: "Destroys current account and deposits any remaining balance to address",
             constant: false,
         },
@@ -172,7 +172,7 @@ static BUILTIN_FUNCTIONS: Lazy<[Prototype; 28]> = Lazy::new(|| {
             name: "gasleft",
             params: vec![],
             ret: vec![Type::Uint(64)],
-            target: vec![Target::default_substrate(), Target::Ewasm],
+            target: vec![Target::default_substrate(), Target::EVM],
             doc: "Return remaining gas left in current call",
             constant: false,
         },
@@ -183,7 +183,7 @@ static BUILTIN_FUNCTIONS: Lazy<[Prototype; 28]> = Lazy::new(|| {
             name: "blockhash",
             params: vec![Type::Uint(64)],
             ret: vec![Type::Bytes(32)],
-            target: vec![Target::Ewasm],
+            target: vec![Target::EVM],
             doc: "Returns the block hash for given block number",
             constant: false,
         },
@@ -361,7 +361,7 @@ static BUILTIN_VARIABLE: Lazy<[Prototype; 16]> = Lazy::new(|| {
             name: "coinbase",
             params: vec![],
             ret: vec![Type::Address(true)],
-            target: vec![Target::Ewasm],
+            target: vec![Target::EVM],
             doc: "The address of the current block miner",
             constant: false,
         },
@@ -372,7 +372,7 @@ static BUILTIN_VARIABLE: Lazy<[Prototype; 16]> = Lazy::new(|| {
             name: "difficulty",
             params: vec![],
             ret: vec![Type::Uint(256)],
-            target: vec![Target::Ewasm],
+            target: vec![Target::EVM],
             doc: "The difficulty for current block",
             constant: false,
         },
@@ -383,7 +383,7 @@ static BUILTIN_VARIABLE: Lazy<[Prototype; 16]> = Lazy::new(|| {
             name: "gaslimit",
             params: vec![],
             ret: vec![Type::Uint(64)],
-            target: vec![Target::Ewasm],
+            target: vec![Target::EVM],
             doc: "The gas limit",
             constant: false,
         },
@@ -504,7 +504,7 @@ static BUILTIN_VARIABLE: Lazy<[Prototype; 16]> = Lazy::new(|| {
             name: "gasprice",
             params: vec![],
             ret: vec![Type::Value],
-            target: vec![Target::default_substrate(), Target::Ewasm],
+            target: vec![Target::default_substrate(), Target::EVM],
             doc: "gas price for one gas unit",
             constant: false,
         },
@@ -515,7 +515,7 @@ static BUILTIN_VARIABLE: Lazy<[Prototype; 16]> = Lazy::new(|| {
             name: "origin",
             params: vec![],
             ret: vec![Type::Address(true)],
-            target: vec![Target::Ewasm],
+            target: vec![Target::EVM],
             doc: "Original address of sender current transaction",
             constant: false,
         },

+ 4 - 4
src/sema/expression.rs

@@ -2137,7 +2137,7 @@ pub fn expression(
         pt::Expression::Unit(loc, expr, unit) => {
             match unit {
                 pt::Unit::Wei(loc) | pt::Unit::Gwei(loc) | pt::Unit::Ether(loc)
-                    if ns.target != crate::Target::Ewasm =>
+                    if ns.target != crate::Target::EVM =>
                 {
                     diagnostics.push(Diagnostic::warning(
                         *loc,
@@ -2322,7 +2322,7 @@ fn hex_number_literal(
     if n.starts_with("0x") && !n.chars().any(|c| c == '_') && n.len() == 42 {
         let address = to_hexstr_eip55(n);
 
-        if ns.target == Target::Ewasm {
+        if ns.target == Target::EVM {
             return if address == *n {
                 let s: String = address.chars().skip(2).collect();
 
@@ -6483,8 +6483,8 @@ fn method_call_pos_args(
     if let Type::Address(payable) = &var_ty.deref_any() {
         let ty = match func.name.as_str() {
             "call" => Some(CallTy::Regular),
-            "delegatecall" if ns.target == Target::Ewasm => Some(CallTy::Delegate),
-            "staticcall" if ns.target == Target::Ewasm => Some(CallTy::Static),
+            "delegatecall" if ns.target == Target::EVM => Some(CallTy::Delegate),
+            "staticcall" if ns.target == Target::EVM => Some(CallTy::Static),
             _ => None,
         };
 

+ 2 - 2
src/sema/functions.rs

@@ -553,7 +553,7 @@ pub fn contract_function(
 
     if func.ty == pt::FunctionTy::Constructor {
         // In the eth solidity, only one constructor is allowed
-        if ns.target == Target::Ewasm {
+        if ns.target == Target::EVM {
             if let Some(prev_func_no) = ns.contracts[contract_no]
                 .functions
                 .iter()
@@ -1128,7 +1128,7 @@ pub fn resolve_returns(
 fn signatures() {
     use super::*;
 
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
 
     ns.contracts.push(ast::Contract::new(
         "bar",

+ 1 - 1
src/sema/namespace.rs

@@ -26,7 +26,7 @@ impl Namespace {
     /// Create a namespace and populate with the parameters for the target
     pub fn new(target: Target) -> Self {
         let (address_length, value_length) = match target {
-            Target::Ewasm => (20, 16),
+            Target::EVM => (20, 16),
             Target::Substrate {
                 address_length,
                 value_length,

+ 35 - 35
src/sema/yul/builtin.rs

@@ -17,7 +17,7 @@ impl YulBuiltinPrototype {
     /// Checks if a certain Yul builtin is available for the given target
     pub fn is_available(&self, target: &Target) -> bool {
         match target {
-            Target::Ewasm => self.availability[0],
+            Target::EVM => self.availability[0],
             Target::Substrate { .. } => self.availability[1],
             Target::Solana => self.availability[2],
         }
@@ -272,7 +272,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Stop execution",
             ty: YulBuiltInFunction::Stop,
             stops_execution: true,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "add",
@@ -497,7 +497,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "signextend(i, x) sign extends from (i*8+7)th bit counting from least significant",
             ty: YulBuiltInFunction::SignExtend,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "keccak256",
@@ -506,7 +506,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "keccak256(p, n) performs keccak(mem[p...(p+n)])",
             ty: YulBuiltInFunction::Keccak256,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "pc",
@@ -515,7 +515,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Returns the current position in code, i.e. the program counter",
             ty: YulBuiltInFunction::Pc,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "pop",
@@ -524,7 +524,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "pop(x) discard value x",
             ty: YulBuiltInFunction::Pop,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "mload",
@@ -533,7 +533,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "mload(p) returns mem[p...(p+32)]",
             ty: YulBuiltInFunction::MLoad,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "mstore",
@@ -542,7 +542,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "mstore(p, v) stores v into mem[p...(p+32)]",
             ty: YulBuiltInFunction::MStore,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "mstore8",
@@ -551,7 +551,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "mstore8(p, v) stores (v & 0xff) into mem[p] (modified a single byte of v)",
             ty: YulBuiltInFunction::MStore8,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "sload",
@@ -560,7 +560,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "sload(p) returns storage[p], i.e. memory on contract's storage",
             ty: YulBuiltInFunction::SLoad,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "sstore",
@@ -569,7 +569,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "sstore(p) stores v into storage[p]",
             ty: YulBuiltInFunction::SStore,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "msize",
@@ -578,7 +578,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Returns the size of memory, i.e largest accessed memory index",
             ty: YulBuiltInFunction::MSize,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "gas",
@@ -632,7 +632,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Returns the wei sent together with the current call",
             ty: YulBuiltInFunction::CallValue,
             stops_execution: false,
-            availability: [true, true, true],
+            availability: [true, true, false],
         },
         YulBuiltinPrototype {
             name: "calldataload",
@@ -641,7 +641,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "calldataload(p) returns call data starting from position p (32 bytes)",
             ty: YulBuiltInFunction::CallDataLoad,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "calldatasize",
@@ -650,7 +650,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Returns the size of call data in bytes",
             ty: YulBuiltInFunction::CallDataSize,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "calldatacopy",
@@ -659,7 +659,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "calldatacopy(t, f, s) copies s bytes from calldata at position f to mem at position t",
             ty: YulBuiltInFunction::CallDataCopy,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "codesize",
@@ -668,7 +668,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Returns the size of the current contract / execution context",
             ty: YulBuiltInFunction::CodeSize,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "codecopy",
@@ -677,7 +677,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "codecopy(t, f, s) copies s bytes from code at position f to mem at position t",
             ty: YulBuiltInFunction::CodeCopy,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "extcodesize",
@@ -695,7 +695,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "extcodecopy(a, t, f, s) copies s bytes from code located at address a at position f to mem at position t",
             ty: YulBuiltInFunction::ExtCodeCopy,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "returndatasize",
@@ -704,7 +704,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Returns the size of the last returndata",
             ty: YulBuiltInFunction::ReturnDataSize,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "returndatacopy",
@@ -713,7 +713,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "returndatacopy(t, f, s) copy s bytes from return data at position f to mem at position t",
             ty: YulBuiltInFunction::ReturnDataCopy,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "extcodehash",
@@ -722,7 +722,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "extcodehash(a) returns the code hash of address a",
             ty: YulBuiltInFunction::ExtCodeHash,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "create",
@@ -731,7 +731,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "create(v, p, n) creates new contract with code mem[p..(p+n)] and sends v wei. It returns the new address or 0 on error",
             ty: YulBuiltInFunction::Create,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "create2",
@@ -740,7 +740,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "create2(v, p, n, s) new contract with code mem[p...(p+n)] at address keccak256(0xff . this . s . keccak256(mem[p...(p+n)]) and sends v wei.\n 0xff is a 1 byte value, 'this' is the current contract's address as a 20 byte value and 's' is a big endian 256-bit value. it returns 0 on error.",
             ty: YulBuiltInFunction::Create2,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "call",
@@ -749,7 +749,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "call(g, a, v, in, insize, out, outsize) calls contract at address a with input mem[in...(in+insize)] providing f cas and v wei and outputs area mem[out...(out+outsize)]. It returns 0 on error and 1 on success",
             ty: YulBuiltInFunction::Call,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "callcode",
@@ -758,7 +758,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Identical to call(g, a, v, in, insize, out, outsize), but only use the code from a and stay in the context of the current contract otherwise",
             ty: YulBuiltInFunction::CallCode,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "delegatecall",
@@ -767,7 +767,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Identical to 'callcode' but also keep caller and callvalue",
             ty: YulBuiltInFunction::DelegateCall,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "staticcall",
@@ -776,7 +776,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "Identical to call(g, a, 0, in, insize, out, outsize), but do not allow state modifications",
             ty: YulBuiltInFunction::StaticCall,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "return",
@@ -785,7 +785,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "return(p, s) ends execution and returns data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Return,
             stops_execution: true,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "revert",
@@ -794,7 +794,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "revert(p, s) ends execution, reverts state changes and returns data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Revert,
             stops_execution: true,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "selfdestruct",
@@ -821,7 +821,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "log(p, s): log without topics and data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Log0,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "log1",
@@ -830,7 +830,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "log1(p, s, t1): log with topic t1 and data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Log1,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "log2",
@@ -839,7 +839,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "log2(p, s, t1, t2): log with topics t1, t2 and data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Log2,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "log3",
@@ -848,7 +848,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "log3(p, s, t1, t2, t3): log with topics t1, t2, t3 and data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Log3,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "log4",
@@ -857,7 +857,7 @@ static YUL_BUILTIN: [YulBuiltinPrototype; 76] =
             doc: "log4(p, s, t1, t2, t3, t4): log with topics t1, t2, t3, t4 with data mem[p...(p+s)]",
             ty: YulBuiltInFunction::Log4,
             stops_execution: false,
-            availability: [false, false, false],
+            availability: [true, false, false],
         },
         YulBuiltinPrototype {
             name: "chainid",

+ 11 - 11
src/sema/yul/tests/expression.rs

@@ -145,7 +145,7 @@ fn resolve_hex_number_literal() {
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
 
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(0, 3, 5);
     let expr = pt::YulExpression::HexNumberLiteral(
         loc,
@@ -196,7 +196,7 @@ fn resolve_hex_string_literal() {
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
 
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(0, 3, 5);
     let expr = pt::YulExpression::HexStringLiteral(
         HexLiteral {
@@ -303,7 +303,7 @@ fn resolve_variable_local() {
     };
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(1, 2, 3);
 
     let pos1 = symtable
@@ -381,7 +381,7 @@ fn resolve_variable_contract() {
     };
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(0, 2, 3);
     let mut contract = ast::Contract::new("test", ContractTy::Contract(loc), vec![], loc);
     contract.variables.push(Variable {
@@ -542,7 +542,7 @@ fn function_call() {
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
     function_table.new_scope();
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(0, 2, 3);
 
     let expr = pt::YulExpression::FunctionCall(Box::new(YulFunctionCall {
@@ -703,7 +703,7 @@ fn check_arguments() {
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
     function_table.new_scope();
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(0, 2, 3);
 
     function_table.add_function_header(
@@ -774,7 +774,7 @@ fn check_arguments() {
     assert!(!ns.diagnostics.is_empty());
     assert_eq!(
         ns.diagnostics.iter().next().unwrap().message,
-        "builtin 'pop' is not available for target ewasm. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function"
+        "builtin function 'pop' returns nothing"
     );
     ns.diagnostics = Diagnostics::default();
 
@@ -839,7 +839,7 @@ fn test_member_access() {
     };
     let mut symtable = Symtable::new();
     let mut function_table = FunctionsTable::new(0);
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let loc = Loc::File(0, 2, 3);
 
     let mut contract = ast::Contract::new("test", ContractTy::Contract(loc), vec![], loc);
@@ -944,7 +944,7 @@ fn test_check_types() {
         yul_function: false,
     };
 
-    let mut ns = Namespace::new(Target::Ewasm);
+    let mut ns = Namespace::new(Target::EVM);
     let mut contract = ast::Contract::new("test", ContractTy::Contract(loc), vec![], loc);
     contract.variables.push(Variable {
         tags: vec![],
@@ -1624,7 +1624,7 @@ contract foo {
     let mut cache = FileResolver::new();
     cache.set_file_contents("test.sol", file.to_string());
 
-    let ns = parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Ewasm);
+    let ns = parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Solana);
 
-    assert!(ns.diagnostics.contains_message("builtin 'log0' is not available for target ewasm. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function"));
+    assert!(ns.diagnostics.contains_message("builtin 'log0' is not available for target solana. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function"));
 }

+ 3 - 1
src/sema/yul/tests/mod.rs

@@ -19,5 +19,7 @@ pub(crate) fn parse(src: &'static str) -> ast::Namespace {
     let mut cache = FileResolver::new();
     cache.set_file_contents("test.sol", src.to_string());
 
-    parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Ewasm)
+    let ns = parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::EVM);
+    ns.print_diagnostics_in_plain(&cache, false);
+    ns
 }

+ 2 - 2
src/sema/yul/tests/mutability.rs

@@ -353,7 +353,7 @@ fn pure_function() {
     // TODO: There is no implemented function that writes to state
     assert!(ns
         .diagnostics
-        .contains_message("builtin 'log0' is not available for target ewasm. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function"));
+        .contains_message("function declared 'pure' but this expression writes to state"));
 }
 
 #[test]
@@ -376,7 +376,7 @@ fn view_function() {
     let ns = parse(file);
     assert!(ns
         .diagnostics
-        .contains_message("builtin 'create' is not available for target ewasm. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function"));
+        .contains_message("function declared 'view' but this expression writes to state"));
 
     let file = r#"
     contract testTypes {

+ 2 - 2
tests/codegen_testcases/solidity/constant_folding.sol

@@ -1,10 +1,10 @@
-// RUN: --target ewasm --emit cfg
+// RUN: --target substrate --emit cfg
 
 contract CodeWithJD {
     mapping(address => uint256) balances;
     // BEGIN-CHECK: CodeWithJD::CodeWithJD::function::totalSupply
     function totalSupply() public view returns (uint256) {
-        // CHECK: load storage slot(hex"57644ed870b18b050a0801bb92210bbd4c1bff6200ff20e5e51ab4aae9546da8") ty:uint256
+        // CHECK: load storage slot(hex"b55fba97e5495840b2400ab391e4362b96f1173f44a58442cdd3f776b62832ad") ty:uint256
         return balances[address(0x00)];
     }
 }

+ 2 - 2
tests/codegen_testcases/solidity/llvm_type.sol

@@ -1,4 +1,4 @@
-// RUN: --target ewasm --emit cfg
+// RUN: --target substrate --emit cfg
 contract  Ownable  {
 
 // BEGIN-CHECK: Ownable::Ownable::function::_msgData
@@ -6,4 +6,4 @@ contract  Ownable  {
         // CHECK: return (builtin Calldata ())
         return msg.data;
     }
-}
+}

+ 2 - 2
tests/codegen_testcases/yul/ewasm_builtin.sol → tests/codegen_testcases/yul/evm_builtin.sol

@@ -1,4 +1,4 @@
-// RUN: --target ewasm --emit cfg -Onone --no-cse
+// RUN: --target evm --emit cfg -Onone --no-cse
 
 contract Testing {
 
@@ -59,4 +59,4 @@ contract Testing {
             selfdestruct(arg1)
         }
     }
-}
+}

+ 29 - 23
tests/contract.rs

@@ -23,8 +23,8 @@ fn substrate_contracts() -> io::Result<()> {
 }
 
 #[test]
-fn ewasm_contracts() -> io::Result<()> {
-    contract_tests("tests/contract_testcases/ewasm", Target::Ewasm)
+fn evm_contracts() -> io::Result<()> {
+    contract_tests("tests/contract_testcases/evm", Target::EVM)
 }
 
 fn contract_tests(file_path: &str, target: Target) -> io::Result<()> {
@@ -79,29 +79,35 @@ fn parse_file(path: PathBuf, target: Target) -> io::Result<()> {
         let context = inkwell::context::Context::create();
 
         // let's try and emit
-        if ns.target == Target::Solana {
-            solang::emit::binary::Binary::build_bundle(
-                &context,
-                &[&ns],
-                &filename,
-                Default::default(),
-                false,
-                false,
-            );
-        } else {
-            for contract in &ns.contracts {
-                if contract.is_concrete() {
-                    solang::emit::binary::Binary::build(
-                        &context,
-                        contract,
-                        &ns,
-                        &filename,
-                        Default::default(),
-                        false,
-                        false,
-                    );
+        match ns.target {
+            Target::Solana => {
+                solang::emit::binary::Binary::build_bundle(
+                    &context,
+                    &[&ns],
+                    &filename,
+                    Default::default(),
+                    false,
+                    false,
+                );
+            }
+            Target::Substrate { .. } => {
+                for contract in &ns.contracts {
+                    if contract.is_concrete() {
+                        solang::emit::binary::Binary::build(
+                            &context,
+                            contract,
+                            &ns,
+                            &filename,
+                            Default::default(),
+                            false,
+                            false,
+                        );
+                    }
                 }
             }
+            Target::EVM => {
+                // not implemented yet
+            }
         }
     }
 

+ 12 - 0
tests/contract_testcases/evm/call/call.dot

@@ -0,0 +1,12 @@
+strict digraph "tests/contract_testcases/evm/call/call.sol" {
+	contract [label="contract x\ntests/contract_testcases/evm/call/call.sol:2:9-6:10"]
+	f [label="function f\ncontract: x\ntests/contract_testcases/evm/call/call.sol:3:13-49\nsignature f(address)\nvisibility public\nmutability nonpayable"]
+	parameters [label="parameters\naddress payable a"]
+	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/evm/call/call.sol:2:9-6:10"]
+	diagnostic_6 [label="'delegatecall' cannot have value specifed\nlevel Error\ntests/contract_testcases/evm/call/call.sol:4:45-73"]
+	contracts -> contract
+	contract -> f [label="function"]
+	f -> parameters [label="parameters"]
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_6 [label="Error"]
+}

+ 0 - 0
tests/contract_testcases/ewasm/call/call.sol → tests/contract_testcases/evm/call/call.sol


+ 12 - 0
tests/contract_testcases/evm/call/call_01.dot

@@ -0,0 +1,12 @@
+strict digraph "tests/contract_testcases/evm/call/call_01.sol" {
+	contract [label="contract x\ntests/contract_testcases/evm/call/call_01.sol:2:9-6:10"]
+	f [label="function f\ncontract: x\ntests/contract_testcases/evm/call/call_01.sol:3:13-49\nsignature f(address)\nvisibility public\nmutability nonpayable"]
+	parameters [label="parameters\naddress payable a"]
+	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/evm/call/call_01.sol:2:9-6:10"]
+	diagnostic_6 [label="'staticcall' cannot have value specifed\nlevel Error\ntests/contract_testcases/evm/call/call_01.sol:4:45-71"]
+	contracts -> contract
+	contract -> f [label="function"]
+	f -> parameters [label="parameters"]
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_6 [label="Error"]
+}

+ 0 - 0
tests/contract_testcases/ewasm/call/call_01.sol → tests/contract_testcases/evm/call/call_01.sol


+ 13 - 13
tests/contract_testcases/ewasm/call/call_02.dot → tests/contract_testcases/evm/call/call_02.dot

@@ -1,19 +1,19 @@
-strict digraph "tests/contract_testcases/ewasm/call/call_02.sol" {
-	contract [label="contract x\ntests/contract_testcases/ewasm/call/call_02.sol:2:9-6:10"]
-	f [label="function f\ncontract: x\ntests/contract_testcases/ewasm/call/call_02.sol:3:13-49\nsignature f(address)\nvisibility public\nmutability nonpayable"]
+strict digraph "tests/contract_testcases/evm/call/call_02.sol" {
+	contract [label="contract x\ntests/contract_testcases/evm/call/call_02.sol:2:9-6:10"]
+	f [label="function f\ncontract: x\ntests/contract_testcases/evm/call/call_02.sol:3:13-49\nsignature f(address)\nvisibility public\nmutability nonpayable"]
 	parameters [label="parameters\naddress payable a"]
-	destructure [label="destructure\ntests/contract_testcases/ewasm/call/call_02.sol:4:17-65"]
+	destructure [label="destructure\ntests/contract_testcases/evm/call/call_02.sol:4:17-65"]
 	param [label="bool s"]
 	param_6 [label="bytes bs"]
-	call_external_function [label="call external function\ntests/contract_testcases/ewasm/call/call_02.sol:4:45-65"]
-	variable [label="variable: a\naddress payable\ntests/contract_testcases/ewasm/call/call_02.sol:4:45-46"]
-	alloc_array [label="alloc array bytes\ninitializer: \ntests/contract_testcases/ewasm/call/call_02.sol:4:62-64"]
-	number_literal [label="uint32 literal: 0\ntests/contract_testcases/ewasm/call/call_02.sol:4:62-64"]
-	number_literal_11 [label="uint128 literal: 2\ntests/contract_testcases/ewasm/call/call_02.sol:4:59-60"]
-	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/ewasm/call/call_02.sol:2:9-6:10"]
-	diagnostic_14 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:3:13-49"]
-	diagnostic_15 [label="destructure variable 's' has never been used\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:4:23-24"]
-	diagnostic_16 [label="destructure variable 'bs' has never been used\nlevel Warning\ntests/contract_testcases/ewasm/call/call_02.sol:4:39-41"]
+	call_external_function [label="call external function\ntests/contract_testcases/evm/call/call_02.sol:4:45-65"]
+	variable [label="variable: a\naddress payable\ntests/contract_testcases/evm/call/call_02.sol:4:45-46"]
+	alloc_array [label="alloc array bytes\ninitializer: \ntests/contract_testcases/evm/call/call_02.sol:4:62-64"]
+	number_literal [label="uint32 literal: 0\ntests/contract_testcases/evm/call/call_02.sol:4:62-64"]
+	number_literal_11 [label="uint128 literal: 2\ntests/contract_testcases/evm/call/call_02.sol:4:59-60"]
+	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/evm/call/call_02.sol:2:9-6:10"]
+	diagnostic_14 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/evm/call/call_02.sol:3:13-49"]
+	diagnostic_15 [label="destructure variable 's' has never been used\nlevel Warning\ntests/contract_testcases/evm/call/call_02.sol:4:23-24"]
+	diagnostic_16 [label="destructure variable 'bs' has never been used\nlevel Warning\ntests/contract_testcases/evm/call/call_02.sol:4:39-41"]
 	contracts -> contract
 	contract -> f [label="function"]
 	f -> parameters [label="parameters"]

+ 0 - 0
tests/contract_testcases/ewasm/call/call_02.sol → tests/contract_testcases/evm/call/call_02.sol


+ 1668 - 0
tests/contract_testcases/evm/comment_tests.dot

@@ -0,0 +1,1668 @@
+strict digraph "tests/contract_testcases/evm/comment_tests.sol" {
+	Transfer [label="name:Transfer\ncontract: 0\ntests/contract_testcases/evm/comment_tests.sol:58:11-19\nfield name:from ty:address indexed:yes\nfield name:to ty:address indexed:yes\nfield name:value ty:uint256 indexed:no"]
+	Approval [label="name:Approval\ncontract: 0\ntests/contract_testcases/evm/comment_tests.sol:61:11-19\nfield name:owner ty:address indexed:yes\nfield name:spender ty:address indexed:yes\nfield name:value ty:uint256 indexed:no"]
+	OwnershipTransferred [label="name:OwnershipTransferred\ncontract: 4\ntests/contract_testcases/evm/comment_tests.sol:312:9-29\nfield name:previousOwner ty:address indexed:yes\nfield name:newOwner ty:address indexed:yes"]
+	contract [label="contract IERC20\ntests/contract_testcases/evm/comment_tests.sol:16:5-66:2"]
+	balanceOf [label="function balanceOf\ncontract: IERC20\ntests/contract_testcases/evm/comment_tests.sol:18:5-19:92\nsignature balanceOf(address)\nvisibility external\nmutability view\nvirtual"]
+	parameters [label="parameters\naddress account"]
+	returns [label="returns\nuint256 "]
+	totalSupply [label="function totalSupply\ncontract: IERC20\ntests/contract_testcases/evm/comment_tests.sol:21:5-22:59\nsignature totalSupply()\nvisibility external\nmutability view\nvirtual"]
+	returns_10 [label="returns\nuint256 "]
+	transfer [label="function transfer\ncontract: IERC20\ntests/contract_testcases/evm/comment_tests.sol:31:5-35:27\nsignature transfer(address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
+	parameters_12 [label="parameters\naddress recipient\nuint256 amount"]
+	returns_13 [label="returns\nbool "]
+	allowance [label="function allowance\ncontract: IERC20\ntests/contract_testcases/evm/comment_tests.sol:38:5-43:26\nsignature allowance(address,address)\nvisibility external\nmutability view\nvirtual"]
+	parameters_15 [label="parameters\naddress owner\naddress spender"]
+	returns_16 [label="returns\nuint256 "]
+	approve [label="function approve\ncontract: IERC20\ntests/contract_testcases/evm/comment_tests.sol:46:5-78\nsignature approve(address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
+	parameters_18 [label="parameters\naddress spender\nuint256 amount"]
+	returns_19 [label="returns\nbool "]
+	transferFrom [label="function transferFrom\ncontract: IERC20\ntests/contract_testcases/evm/comment_tests.sol:51:5-55:30\nsignature transferFrom(address,address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
+	parameters_21 [label="parameters\naddress sender\naddress recipient\nuint256 amount"]
+	returns_22 [label="returns\nbool "]
+	contract_23 [label="contract SafeMath\ntests/contract_testcases/evm/comment_tests.sol:71:1-151:2"]
+	add [label="function add\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:74:5-71\nsignature add(uint256,uint256)\nvisibility internal\nmutability pure"]
+	parameters_25 [label="parameters\nuint256 a\nuint256 b"]
+	returns_26 [label="returns\nuint256 "]
+	var_decl [label="variable decl uint256 c\ntests/contract_testcases/evm/comment_tests.sol:75:9-26"]
+	add_28 [label="add\nuint256\ntests/contract_testcases/evm/comment_tests.sol:75:21-26"]
+	variable [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:75:21-22"]
+	variable_30 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:75:25-26"]
+	expr [label="expression\ntests/contract_testcases/evm/comment_tests.sol:76:9-55"]
+	builtins [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:76:9-16"]
+	more_equal [label="more equal\ntests/contract_testcases/evm/comment_tests.sol:76:17-23"]
+	variable_34 [label="variable: c\nuint256\ntests/contract_testcases/evm/comment_tests.sol:76:17-18"]
+	variable_35 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:76:22-23"]
+	alloc_array [label="alloc array string\ninitializer: 536166654d6174683a206164646974696f6e206f766572666c6f77\ntests/contract_testcases/evm/comment_tests.sol:76:25-54"]
+	number_literal [label="uint32 literal: 27\ntests/contract_testcases/evm/comment_tests.sol:76:25-54"]
+	return [label="return\ntests/contract_testcases/evm/comment_tests.sol:78:9-17"]
+	variable_39 [label="variable: c\nuint256\ntests/contract_testcases/evm/comment_tests.sol:78:16-17"]
+	sub [label="function sub\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:82:5-71\nsignature sub(uint256,uint256)\nvisibility internal\nmutability pure"]
+	parameters_41 [label="parameters\nuint256 a\nuint256 b"]
+	returns_42 [label="returns\nuint256 "]
+	return_43 [label="return\ntests/contract_testcases/evm/comment_tests.sol:83:9-59"]
+	call_internal_function [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:83:16-59"]
+	internal_function [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:83:16-59"]
+	variable_46 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:83:20-21"]
+	variable_47 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:83:23-24"]
+	alloc_array_48 [label="alloc array string\ninitializer: 536166654d6174683a207375627472616374696f6e206f766572666c6f77\ntests/contract_testcases/evm/comment_tests.sol:83:26-58"]
+	number_literal_49 [label="uint32 literal: 30\ntests/contract_testcases/evm/comment_tests.sol:83:26-58"]
+	sub_50 [label="function sub\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:89:5-93:38\nsignature sub(uint256,uint256,string)\nvisibility internal\nmutability pure"]
+	parameters_51 [label="parameters\nuint256 a\nuint256 b\nstring errorMessage"]
+	returns_52 [label="returns\nuint256 "]
+	expr_53 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:94:9-38"]
+	builtins_54 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:94:9-16"]
+	less_equal [label="less equal\ntests/contract_testcases/evm/comment_tests.sol:94:17-23"]
+	variable_56 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:94:17-18"]
+	variable_57 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:94:22-23"]
+	variable_58 [label="variable: errorMessage\nstring\ntests/contract_testcases/evm/comment_tests.sol:94:25-37"]
+	var_decl_59 [label="variable decl uint256 c\ntests/contract_testcases/evm/comment_tests.sol:95:9-26"]
+	subtract [label="subtract\nuint256\ntests/contract_testcases/evm/comment_tests.sol:95:21-26"]
+	variable_61 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:95:21-22"]
+	variable_62 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:95:25-26"]
+	return_63 [label="return\ntests/contract_testcases/evm/comment_tests.sol:97:9-17"]
+	variable_64 [label="variable: c\nuint256\ntests/contract_testcases/evm/comment_tests.sol:97:16-17"]
+	mul [label="function mul\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:101:5-71\nsignature mul(uint256,uint256)\nvisibility internal\nmutability pure"]
+	parameters_66 [label="parameters\nuint256 a\nuint256 b"]
+	returns_67 [label="returns\nuint256 "]
+	if [label="if\ntests/contract_testcases/evm/comment_tests.sol:105:9-107:10"]
+	equal [label="equal\ntests/contract_testcases/evm/comment_tests.sol:105:13-19"]
+	variable_70 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:105:13-14"]
+	number_literal_71 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:105:18-19"]
+	return_72 [label="return\ntests/contract_testcases/evm/comment_tests.sol:106:13-21"]
+	number_literal_73 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:106:20-21"]
+	var_decl_74 [label="variable decl uint256 c\ntests/contract_testcases/evm/comment_tests.sol:109:9-26"]
+	multiply [label="multiply\nuint256\ntests/contract_testcases/evm/comment_tests.sol:109:21-26"]
+	variable_76 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:109:21-22"]
+	variable_77 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:109:25-26"]
+	expr_78 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:110:9-72"]
+	builtins_79 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:110:9-16"]
+	equal_80 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:110:17-27"]
+	divide [label="divide\nuint256\ntests/contract_testcases/evm/comment_tests.sol:110:17-22"]
+	variable_82 [label="variable: c\nuint256\ntests/contract_testcases/evm/comment_tests.sol:110:17-18"]
+	variable_83 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:110:21-22"]
+	variable_84 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:110:26-27"]
+	alloc_array_85 [label="alloc array string\ninitializer: 536166654d6174683a206d756c7469706c696275726e726570656174696f6e206f766572666c6f77\ntests/contract_testcases/evm/comment_tests.sol:110:29-71"]
+	number_literal_86 [label="uint32 literal: 40\ntests/contract_testcases/evm/comment_tests.sol:110:29-71"]
+	return_87 [label="return\ntests/contract_testcases/evm/comment_tests.sol:114:9-17"]
+	variable_88 [label="variable: c\nuint256\ntests/contract_testcases/evm/comment_tests.sol:114:16-17"]
+	div [label="function div\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:118:5-71\nsignature div(uint256,uint256)\nvisibility internal\nmutability pure"]
+	parameters_90 [label="parameters\nuint256 a\nuint256 b"]
+	returns_91 [label="returns\nuint256 "]
+	return_92 [label="return\ntests/contract_testcases/evm/comment_tests.sol:119:9-55"]
+	call_internal_function_93 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:119:16-55"]
+	internal_function_94 [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/evm/comment_tests.sol:119:16-55"]
+	variable_95 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:119:20-21"]
+	variable_96 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:119:23-24"]
+	alloc_array_97 [label="alloc array string\ninitializer: 536166654d6174683a206469766973696f6e206279207a65726f\ntests/contract_testcases/evm/comment_tests.sol:119:26-54"]
+	number_literal_98 [label="uint32 literal: 26\ntests/contract_testcases/evm/comment_tests.sol:119:26-54"]
+	div_99 [label="function div\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:123:5-127:38\nsignature div(uint256,uint256,string)\nvisibility internal\nmutability pure"]
+	parameters_100 [label="parameters\nuint256 a\nuint256 b\nstring errorMessage"]
+	returns_101 [label="returns\nuint256 "]
+	expr_102 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:128:9-37"]
+	builtins_103 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:128:9-16"]
+	more [label="more\ntests/contract_testcases/evm/comment_tests.sol:128:17-22"]
+	variable_105 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:128:17-18"]
+	number_literal_106 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:128:21-22"]
+	variable_107 [label="variable: errorMessage\nstring\ntests/contract_testcases/evm/comment_tests.sol:128:24-36"]
+	var_decl_108 [label="variable decl uint256 c\ntests/contract_testcases/evm/comment_tests.sol:129:9-26"]
+	divide_109 [label="divide\nuint256\ntests/contract_testcases/evm/comment_tests.sol:129:21-26"]
+	variable_110 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:129:21-22"]
+	variable_111 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:129:25-26"]
+	return_112 [label="return\ntests/contract_testcases/evm/comment_tests.sol:132:9-17"]
+	variable_113 [label="variable: c\nuint256\ntests/contract_testcases/evm/comment_tests.sol:132:16-17"]
+	Mdos [label="function Mdos\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:136:5-72\nsignature Mdos(uint256,uint256)\nvisibility internal\nmutability pure"]
+	parameters_115 [label="parameters\nuint256 a\nuint256 b"]
+	returns_116 [label="returns\nuint256 "]
+	return_117 [label="return\ntests/contract_testcases/evm/comment_tests.sol:137:9-54"]
+	call_internal_function_118 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:137:16-54"]
+	internal_function_119 [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.Mdos\ntests/contract_testcases/evm/comment_tests.sol:137:16-54"]
+	variable_120 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:137:21-22"]
+	variable_121 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:137:24-25"]
+	alloc_array_122 [label="alloc array string\ninitializer: 536166654d6174683a206d6f64756c6f206279207a65726f\ntests/contract_testcases/evm/comment_tests.sol:137:27-53"]
+	number_literal_123 [label="uint32 literal: 24\ntests/contract_testcases/evm/comment_tests.sol:137:27-53"]
+	Mdos_124 [label="function Mdos\ncontract: SafeMath\ntests/contract_testcases/evm/comment_tests.sol:143:5-147:38\nsignature Mdos(uint256,uint256,string)\nvisibility internal\nmutability pure"]
+	parameters_125 [label="parameters\nuint256 a\nuint256 b\nstring errorMessage"]
+	returns_126 [label="returns\nuint256 "]
+	expr_127 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:148:9-38"]
+	builtins_128 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:148:9-16"]
+	not [label="not\ntests/contract_testcases/evm/comment_tests.sol:148:17-23"]
+	equal_130 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:148:17-23"]
+	variable_131 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:148:17-18"]
+	number_literal_132 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:148:22-23"]
+	variable_133 [label="variable: errorMessage\nstring\ntests/contract_testcases/evm/comment_tests.sol:148:25-37"]
+	return_134 [label="return\ntests/contract_testcases/evm/comment_tests.sol:149:9-21"]
+	modulo [label="modulo\nuint256\ntests/contract_testcases/evm/comment_tests.sol:149:16-21"]
+	variable_136 [label="variable: a\nuint256\ntests/contract_testcases/evm/comment_tests.sol:149:16-17"]
+	variable_137 [label="variable: b\nuint256\ntests/contract_testcases/evm/comment_tests.sol:149:20-21"]
+	contract_138 [label="contract Context\ntests/contract_testcases/evm/comment_tests.sol:152:1-166:2"]
+	_msgSender [label="function _msgSender\ncontract: Context\ntests/contract_testcases/evm/comment_tests.sol:154:5-74\nsignature _msgSender()\nvisibility internal\nmutability view\nvirtual"]
+	returns_140 [label="returns\naddress payable "]
+	return_141 [label="return\ntests/contract_testcases/evm/comment_tests.sol:155:9-26"]
+	builtins_142 [label="builtin Sender\ntests/contract_testcases/evm/comment_tests.sol:155:16-26"]
+	_msgData [label="function _msgData\ncontract: Context\ntests/contract_testcases/evm/comment_tests.sol:160:5-69\nsignature _msgData()\nvisibility internal\nmutability view\nvirtual"]
+	returns_144 [label="returns\nbytes "]
+	expr_145 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:161:9-13"]
+	builtins_146 [label="builtin GetAddress\ntests/contract_testcases/evm/comment_tests.sol:161:9-13"]
+	return_147 [label="return\ntests/contract_testcases/evm/comment_tests.sol:162:9-24"]
+	builtins_148 [label="builtin Calldata\ntests/contract_testcases/evm/comment_tests.sol:162:16-24"]
+	contract_149 [label="contract Address\ntests/contract_testcases/evm/comment_tests.sol:168:1-300:2"]
+	isContract [label="function isContract\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:171:5-70\nsignature isContract(address)\nvisibility internal\nmutability view"]
+	parameters_151 [label="parameters\naddress account"]
+	returns_152 [label="returns\nbool "]
+	var_decl_153 [label="variable decl bytes32 codehash\ntests/contract_testcases/evm/comment_tests.sol:173:9-25"]
+	var_decl_154 [label="variable decl bytes32 accountHash\ntests/contract_testcases/evm/comment_tests.sol:176:13-177:78"]
+	number_literal_155 [label="bytes32 literal: 89477152217924674838424037953991966239322087453347756267410168184682657981552\ntests/contract_testcases/evm/comment_tests.sol:177:12-78"]
+	inline_assembly [label="inline assembly\ntests/contract_testcases/evm/comment_tests.sol:179:9-183:10"]
+	yul_assignment [label="yul assignment\ntests/contract_testcases/evm/comment_tests.sol:182:13-45"]
+	solidity_variable [label="solidity variable: codehash\nbytes32\ntests/contract_testcases/evm/comment_tests.sol:182:13-21"]
+	yul_builtin_call [label="yul builtin call 'extcodehash'\ntests/contract_testcases/evm/comment_tests.sol:182:25-45"]
+	solidity_variable_160 [label="solidity variable: account\naddress\ntests/contract_testcases/evm/comment_tests.sol:182:37-44"]
+	return_161 [label="return\ntests/contract_testcases/evm/comment_tests.sol:184:9-60"]
+	logical_and [label="logical and\ntests/contract_testcases/evm/comment_tests.sol:184:17-59"]
+	not_163 [label="not\ntests/contract_testcases/evm/comment_tests.sol:184:17-40"]
+	equal_164 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:184:17-40"]
+	variable_165 [label="variable: codehash\nbytes32\ntests/contract_testcases/evm/comment_tests.sol:184:17-25"]
+	variable_166 [label="variable: accountHash\nbytes32\ntests/contract_testcases/evm/comment_tests.sol:184:29-40"]
+	not_167 [label="not\ntests/contract_testcases/evm/comment_tests.sol:184:44-59"]
+	equal_168 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:184:44-59"]
+	variable_169 [label="variable: codehash\nbytes32\ntests/contract_testcases/evm/comment_tests.sol:184:44-52"]
+	number_literal_170 [label="bytes32 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:184:56-59"]
+	sendValue [label="function sendValue\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:188:5-75\nsignature sendValue(address,uint256)\nvisibility internal\nmutability nonpayable"]
+	parameters_172 [label="parameters\naddress payable recipient\nuint256 amount"]
+	expr_173 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:189:9-192:10"]
+	builtins_174 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:189:9-16"]
+	more_equal_175 [label="more equal\ntests/contract_testcases/evm/comment_tests.sol:190:13-44"]
+	sign_ext [label="sign extend uint256\ntests/contract_testcases/evm/comment_tests.sol:190:13-34"]
+	builtins_177 [label="builtin Balance\ntests/contract_testcases/evm/comment_tests.sol:190:13-34"]
+	cast [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:190:13-26"]
+	builtins_179 [label="builtin GetAddress\ntests/contract_testcases/evm/comment_tests.sol:190:21-25"]
+	variable_180 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:190:38-44"]
+	alloc_array_181 [label="alloc array string\ninitializer: 416464726573733a20696e73756666696369656e742062616c616e6365\ntests/contract_testcases/evm/comment_tests.sol:191:13-44"]
+	number_literal_182 [label="uint32 literal: 29\ntests/contract_testcases/evm/comment_tests.sol:191:13-44"]
+	destructure [label="destructure\ntests/contract_testcases/evm/comment_tests.sol:195:9-61"]
+	param [label="bool success"]
+	none [label="none"]
+	call_external_function [label="call external function\ntests/contract_testcases/evm/comment_tests.sol:195:28-61"]
+	variable_187 [label="variable: recipient\naddress payable\ntests/contract_testcases/evm/comment_tests.sol:195:28-37"]
+	alloc_array_188 [label="alloc array bytes\ninitializer: \ntests/contract_testcases/evm/comment_tests.sol:195:58-60"]
+	number_literal_189 [label="uint32 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:195:58-60"]
+	trunc [label="checking truncate uint128\ntests/contract_testcases/evm/comment_tests.sol:195:50-56"]
+	variable_191 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:195:50-56"]
+	expr_192 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:196:9-201:10"]
+	builtins_193 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:196:9-16"]
+	variable_194 [label="variable: success\nbool\ntests/contract_testcases/evm/comment_tests.sol:199:13-20"]
+	alloc_array_195 [label="alloc array string\ninitializer: 416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564\ntests/contract_testcases/evm/comment_tests.sol:200:13-73"]
+	number_literal_196 [label="uint32 literal: 58\ntests/contract_testcases/evm/comment_tests.sol:200:13-73"]
+	functionCall [label="function functionCall\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:205:5-208:31\nsignature functionCall(address,bytes)\nvisibility internal\nmutability nonpayable"]
+	parameters_198 [label="parameters\naddress target\nbytes data"]
+	returns_199 [label="returns\nbytes "]
+	return_200 [label="return\ntests/contract_testcases/evm/comment_tests.sol:210:9-76"]
+	call_internal_function_201 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:210:16-76"]
+	internal_function_202 [label="function(address,bytes,string) internal returns (bytes)\nAddress.functionCall\ntests/contract_testcases/evm/comment_tests.sol:210:16-76"]
+	variable_203 [label="variable: target\naddress\ntests/contract_testcases/evm/comment_tests.sol:210:29-35"]
+	variable_204 [label="variable: data\nbytes\ntests/contract_testcases/evm/comment_tests.sol:210:37-41"]
+	alloc_array_205 [label="alloc array string\ninitializer: 416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564\ntests/contract_testcases/evm/comment_tests.sol:210:43-75"]
+	number_literal_206 [label="uint32 literal: 30\ntests/contract_testcases/evm/comment_tests.sol:210:43-75"]
+	functionCall_207 [label="function functionCall\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:216:5-221:38\nsignature functionCall(address,bytes,string)\nvisibility internal\nmutability nonpayable"]
+	parameters_208 [label="parameters\naddress target\nbytes data\nstring errorMessage"]
+	returns_209 [label="returns\nbytes "]
+	return_210 [label="return\ntests/contract_testcases/evm/comment_tests.sol:222:9-69"]
+	call_internal_function_211 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:222:16-69"]
+	internal_function_212 [label="function(address,bytes,uint256,string) internal returns (bytes)\nAddress._functionCallWithValue\ntests/contract_testcases/evm/comment_tests.sol:222:16-69"]
+	variable_213 [label="variable: target\naddress\ntests/contract_testcases/evm/comment_tests.sol:222:39-45"]
+	variable_214 [label="variable: data\nbytes\ntests/contract_testcases/evm/comment_tests.sol:222:47-51"]
+	number_literal_215 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:222:53-54"]
+	variable_216 [label="variable: errorMessage\nstring\ntests/contract_testcases/evm/comment_tests.sol:222:56-68"]
+	functionCallWithValue [label="function functionCallWithValue\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:228:5-233:38\nsignature functionCallWithValue(address,bytes,uint256)\nvisibility internal\nmutability nonpayable"]
+	parameters_218 [label="parameters\naddress target\nbytes data\nuint256 value"]
+	returns_219 [label="returns\nbytes "]
+	return_220 [label="return\ntests/contract_testcases/evm/comment_tests.sol:234:9-242:14"]
+	call_internal_function_221 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:235:13-242:14"]
+	internal_function_222 [label="function(address,bytes,uint256,string) internal returns (bytes)\nAddress.functionCallWithValue\ntests/contract_testcases/evm/comment_tests.sol:235:13-242:14"]
+	variable_223 [label="variable: target\naddress\ntests/contract_testcases/evm/comment_tests.sol:236:17-23"]
+	variable_224 [label="variable: data\nbytes\ntests/contract_testcases/evm/comment_tests.sol:237:17-21"]
+	variable_225 [label="variable: value\nuint256\ntests/contract_testcases/evm/comment_tests.sol:240:17-22"]
+	alloc_array_226 [label="alloc array string\ninitializer: 416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564\ntests/contract_testcases/evm/comment_tests.sol:241:17-60"]
+	number_literal_227 [label="uint32 literal: 41\ntests/contract_testcases/evm/comment_tests.sol:241:17-60"]
+	functionCallWithValue_228 [label="function functionCallWithValue\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:246:5-254:38\nsignature functionCallWithValue(address,bytes,uint256,string)\nvisibility internal\nmutability nonpayable"]
+	parameters_229 [label="parameters\naddress target\nbytes data\nuint256 value\nstring errorMessage"]
+	returns_230 [label="returns\nbytes "]
+	expr_231 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:255:9-258:10"]
+	builtins_232 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:255:9-16"]
+	more_equal_233 [label="more equal\ntests/contract_testcases/evm/comment_tests.sol:256:13-43"]
+	sign_ext_234 [label="sign extend uint256\ntests/contract_testcases/evm/comment_tests.sol:256:13-34"]
+	builtins_235 [label="builtin Balance\ntests/contract_testcases/evm/comment_tests.sol:256:13-34"]
+	cast_236 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:256:13-26"]
+	builtins_237 [label="builtin GetAddress\ntests/contract_testcases/evm/comment_tests.sol:256:21-25"]
+	variable_238 [label="variable: value\nuint256\ntests/contract_testcases/evm/comment_tests.sol:256:38-43"]
+	alloc_array_239 [label="alloc array string\ninitializer: 416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c\ntests/contract_testcases/evm/comment_tests.sol:257:13-53"]
+	number_literal_240 [label="uint32 literal: 38\ntests/contract_testcases/evm/comment_tests.sol:257:13-53"]
+	return_241 [label="return\ntests/contract_testcases/evm/comment_tests.sol:259:9-73"]
+	call_internal_function_242 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:259:16-73"]
+	internal_function_243 [label="function(address,bytes,uint256,string) internal returns (bytes)\nAddress._functionCallWithValue\ntests/contract_testcases/evm/comment_tests.sol:259:16-73"]
+	variable_244 [label="variable: target\naddress\ntests/contract_testcases/evm/comment_tests.sol:259:39-45"]
+	variable_245 [label="variable: data\nbytes\ntests/contract_testcases/evm/comment_tests.sol:259:47-51"]
+	variable_246 [label="variable: value\nuint256\ntests/contract_testcases/evm/comment_tests.sol:259:53-58"]
+	variable_247 [label="variable: errorMessage\nstring\ntests/contract_testcases/evm/comment_tests.sol:259:60-72"]
+	_functionCallWithValue [label="function _functionCallWithValue\ncontract: Address\ntests/contract_testcases/evm/comment_tests.sol:264:5-270:37\nsignature _functionCallWithValue(address,bytes,uint256,string)\nvisibility private\nmutability nonpayable"]
+	parameters_249 [label="parameters\naddress target\nbytes data\nuint256 weiValue\nstring errorMessage"]
+	returns_250 [label="returns\nbytes "]
+	expr_251 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:271:9-69"]
+	builtins_252 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:271:9-16"]
+	call_internal_function_253 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:271:17-35"]
+	internal_function_254 [label="function(address) internal view returns (bool)\nAddress.isContract\ntests/contract_testcases/evm/comment_tests.sol:271:17-35"]
+	variable_255 [label="variable: target\naddress\ntests/contract_testcases/evm/comment_tests.sol:271:28-34"]
+	alloc_array_256 [label="alloc array string\ninitializer: 416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374\ntests/contract_testcases/evm/comment_tests.sol:271:37-68"]
+	number_literal_257 [label="uint32 literal: 29\ntests/contract_testcases/evm/comment_tests.sol:271:37-68"]
+	destructure_258 [label="destructure\ntests/contract_testcases/evm/comment_tests.sol:276:9-278:10"]
+	param_259 [label="bool success"]
+	param_260 [label="bytes returndata"]
+	call_external_function_261 [label="call external function\ntests/contract_testcases/evm/comment_tests.sol:276:51-278:10"]
+	variable_262 [label="variable: target\naddress\ntests/contract_testcases/evm/comment_tests.sol:276:51-57"]
+	variable_263 [label="variable: data\nbytes\ntests/contract_testcases/evm/comment_tests.sol:277:13-17"]
+	trunc_264 [label="checking truncate uint128\ntests/contract_testcases/evm/comment_tests.sol:276:70-78"]
+	variable_265 [label="variable: weiValue\nuint256\ntests/contract_testcases/evm/comment_tests.sol:276:70-78"]
+	if_266 [label="if\ntests/contract_testcases/evm/comment_tests.sol:281:9-296:10"]
+	variable_267 [label="variable: success\nbool\ntests/contract_testcases/evm/comment_tests.sol:281:13-20"]
+	return_268 [label="return\ntests/contract_testcases/evm/comment_tests.sol:282:13-30"]
+	variable_269 [label="variable: returndata\nbytes\ntests/contract_testcases/evm/comment_tests.sol:282:20-30"]
+	if_270 [label="if\ntests/contract_testcases/evm/comment_tests.sol:285:13-295:14"]
+	more_271 [label="more\ntests/contract_testcases/evm/comment_tests.sol:285:17-38"]
+	builtins_272 [label="builtin ArrayLength\ntests/contract_testcases/evm/comment_tests.sol:285:17-34"]
+	variable_273 [label="variable: returndata\nbytes\ntests/contract_testcases/evm/comment_tests.sol:285:17-27"]
+	number_literal_274 [label="uint32 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:285:37-38"]
+	inline_assembly_275 [label="inline assembly\ntests/contract_testcases/evm/comment_tests.sol:287:17-290:18"]
+	yul_var_decl [label="yul variable declaration\ntests/contract_testcases/evm/comment_tests.sol:288:21-61"]
+	var_decl_item [label="yul variable declaration uint256 returndata_size\ntests/contract_testcases/evm/comment_tests.sol:288:25-40"]
+	yul_builtin_call_278 [label="yul builtin call 'mload'\ntests/contract_testcases/evm/comment_tests.sol:288:44-61"]
+	solidity_variable_279 [label="solidity variable: returndata\nbytes\ntests/contract_testcases/evm/comment_tests.sol:288:50-60"]
+	yul_builtin_call_280 [label="yul builtin call 'revert'\ntests/contract_testcases/evm/comment_tests.sol:289:21-65"]
+	yul_builtin_call_281 [label="yul builtin call 'add'\ntests/contract_testcases/evm/comment_tests.sol:289:28-47"]
+	yul_number_literal [label="uint256 literal: 32\ntests/contract_testcases/evm/comment_tests.sol:289:32-34"]
+	solidity_variable_283 [label="solidity variable: returndata\nbytes\ntests/contract_testcases/evm/comment_tests.sol:289:36-46"]
+	yul_variable [label="yul variable: returndata_size\nuint256\ntests/contract_testcases/evm/comment_tests.sol:289:49-64"]
+	expr_285 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:294:17-37"]
+	builtins_286 [label="builtin Revert\ntests/contract_testcases/evm/comment_tests.sol:294:17-23"]
+	variable_287 [label="variable: errorMessage\nstring\ntests/contract_testcases/evm/comment_tests.sol:294:24-36"]
+	contract_288 [label="contract Ownable\ntests/contract_testcases/evm/comment_tests.sol:302:1-373:2"]
+	base [label="base Context\ntests/contract_testcases/evm/comment_tests.sol:303:21-28"]
+	var [label="variable owners\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:304:5-27"]
+	var_291 [label="variable _owner\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:305:5-27"]
+	var_292 [label="variable _deadAddress\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:357:5-78"]
+	number_literal_293 [label="address literal: 57005\ntests/contract_testcases/evm/comment_tests.sol:357:36-78"]
+	node_294 [label="constructor \ncontract: Ownable\ntests/contract_testcases/evm/comment_tests.sol:320:9-321:17\nsignature ()\nvisibility public\nmutability nonpayable"]
+	var_decl_295 [label="variable decl address msgSender\ntests/contract_testcases/evm/comment_tests.sol:323:9-41"]
+	cast_296 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:323:29-41"]
+	call_internal_function_297 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:323:29-41"]
+	internal_function_298 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:323:29-41"]
+	expr_299 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:324:9-27"]
+	assign [label="assign\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:324:9-15"]
+	storage_var [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:324:9-15"]
+	variable_302 [label="variable: msgSender\naddress\ntests/contract_testcases/evm/comment_tests.sol:324:18-27"]
+	emit [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/evm/comment_tests.sol:327:9-57"]
+	number_literal_304 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:327:35-45"]
+	variable_305 [label="variable: msgSender\naddress\ntests/contract_testcases/evm/comment_tests.sol:327:47-56"]
+	owner [label="function owner\ncontract: Ownable\ntests/contract_testcases/evm/comment_tests.sol:330:5-51\nsignature owner()\nvisibility public\nmutability view"]
+	returns_307 [label="returns\naddress "]
+	return_308 [label="return\ntests/contract_testcases/evm/comment_tests.sol:331:9-22"]
+	storage_load [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:331:9-22"]
+	storage_var_310 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:331:16-22"]
+	onlyOwner [label="modifier onlyOwner\ncontract: Ownable\ntests/contract_testcases/evm/comment_tests.sol:336:5-26\nmutability nonpayable"]
+	expr_312 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:337:9-76"]
+	builtins_313 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:337:9-16"]
+	equal_314 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:337:17-39"]
+	storage_load_315 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:337:17-23"]
+	storage_var_316 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:337:17-23"]
+	cast_317 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:337:27-39"]
+	call_internal_function_318 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:337:27-39"]
+	internal_function_319 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:337:27-39"]
+	alloc_array_320 [label="alloc array string\ninitializer: 4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\ntests/contract_testcases/evm/comment_tests.sol:337:41-75"]
+	number_literal_321 [label="uint32 literal: 32\ntests/contract_testcases/evm/comment_tests.sol:337:41-75"]
+	underscore [label="undersore\ntests/contract_testcases/evm/comment_tests.sol:338:9-10"]
+	onlyOwners [label="modifier onlyOwners\ncontract: Ownable\ntests/contract_testcases/evm/comment_tests.sol:343:9-346:5\nmutability nonpayable"]
+	expr_324 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:347:9-40"]
+	builtins_325 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:347:9-16"]
+	equal_326 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:347:17-39"]
+	storage_load_327 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:347:17-23"]
+	storage_var_328 [label="storage variable\nOwnable.owners\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:347:17-23"]
+	cast_329 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:347:27-39"]
+	call_internal_function_330 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:347:27-39"]
+	internal_function_331 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:347:27-39"]
+	underscore_332 [label="undersore\ntests/contract_testcases/evm/comment_tests.sol:348:9-10"]
+	transfer_333 [label="function transfer\ncontract: Ownable\ntests/contract_testcases/evm/comment_tests.sol:350:5-353:18\nsignature transfer(address,address)\nvisibility external\nmutability nonpayable"]
+	parameters_334 [label="parameters\naddress amm\naddress fct"]
+	expr_335 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:354:13-41"]
+	builtins_336 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:354:13-20"]
+	equal_337 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:354:21-36"]
+	variable_338 [label="variable: fct\naddress\ntests/contract_testcases/evm/comment_tests.sol:354:21-24"]
+	number_literal_339 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:354:26-36"]
+	alloc_array_340 [label="alloc array string\ninitializer: 2e\ntests/contract_testcases/evm/comment_tests.sol:354:37-40"]
+	number_literal_341 [label="uint32 literal: 1\ntests/contract_testcases/evm/comment_tests.sol:354:37-40"]
+	expr_342 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:355:13-33"]
+	assign_343 [label="assign\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:355:13-19"]
+	storage_var_344 [label="storage variable\nOwnable.owners\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:355:13-19"]
+	variable_345 [label="variable: amm\naddress\ntests/contract_testcases/evm/comment_tests.sol:355:30-33"]
+	renounceOwnership [label="function renounceOwnership\ncontract: Ownable\ntests/contract_testcases/evm/comment_tests.sol:358:5-364:9\nsignature renounceOwnership()\nvisibility public\nmutability nonpayable\nvirtual"]
+	expr_347 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:366:10-31"]
+	assign_348 [label="assign\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:366:10-16"]
+	storage_var_349 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:366:10-16"]
+	storage_load_350 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:366:19-31"]
+	storage_var_351 [label="storage variable\nOwnable._deadAddress\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:366:19-31"]
+	contract_352 [label="contract TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:374:1-679:2"]
+	base_353 [label="base Context\ntests/contract_testcases/evm/comment_tests.sol:375:22-29"]
+	base_354 [label="base IERC20\ntests/contract_testcases/evm/comment_tests.sol:375:31-37"]
+	base_355 [label="base Ownable\ntests/contract_testcases/evm/comment_tests.sol:375:39-46"]
+	var_356 [label="variable _allowance\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:381:9-83"]
+	var_357 [label="variable _espat\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:382:9-48"]
+	var_358 [label="variable _lances\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:383:9-60"]
+	var_359 [label="variable _isExcludedFromF\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:385:9-66"]
+	var_360 [label="variable _isExcluded\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:386:9-61"]
+	var_361 [label="variable MAX\nvisibility private\nconstant\ntests/contract_testcases/evm/comment_tests.sol:390:9-51"]
+	complement [label="complement uint256\ntests/contract_testcases/evm/comment_tests.sol:390:40-51"]
+	number_literal_363 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:390:41-51"]
+	var_364 [label="variable _Ttotal\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:391:9-60"]
+	multiply_365 [label="multiply\nuint256\ntests/contract_testcases/evm/comment_tests.sol:391:35-60"]
+	number_literal_366 [label="uint256 literal: 10000000000000000\ntests/contract_testcases/evm/comment_tests.sol:391:35-52"]
+	power [label="power\nuint256\ntests/contract_testcases/evm/comment_tests.sol:391:55-60"]
+	number_literal_368 [label="uint256 literal: 10\ntests/contract_testcases/evm/comment_tests.sol:391:55-57"]
+	number_literal_369 [label="uint256 literal: 9\ntests/contract_testcases/evm/comment_tests.sol:391:59-60"]
+	var_370 [label="variable deadF\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:400:5-30"]
+	number_literal_371 [label="uint256 literal: 5\ntests/contract_testcases/evm/comment_tests.sol:400:29-30"]
+	var_372 [label="variable marketingWallet\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:401:5-40"]
+	number_literal_373 [label="uint256 literal: 3\ntests/contract_testcases/evm/comment_tests.sol:401:39-40"]
+	var_374 [label="variable deadAddress\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:402:5-77"]
+	number_literal_375 [label="address literal: 57005\ntests/contract_testcases/evm/comment_tests.sol:402:35-77"]
+	var_376 [label="variable ratify\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:407:5-31"]
+	bool_literal [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:407:27-31"]
+	var_378 [label="variable burnrepeat\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:408:5-44"]
+	number_literal_379 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:408:34-44"]
+	var_380 [label="variable owners\nvisibility internal\ntests/contract_testcases/evm/comment_tests.sol:409:5-19"]
+	var_381 [label="variable _tFeeTotal\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:410:5-31"]
+	var_382 [label="variable _decimals\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:411:5-28"]
+	var_383 [label="variable _symbol\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:412:5-27"]
+	var_384 [label="variable _name\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:413:5-25"]
+	var_385 [label="variable damada\nvisibility private\ntests/contract_testcases/evm/comment_tests.sol:522:5-27"]
+	using [label="using for uint256\nlibrary SafeMath"]
+	using_387 [label="using for address\nlibrary Address"]
+	node_388 [label="constructor \ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:415:9-417:11\nsignature ()\nvisibility public\nmutability nonpayable"]
+	expr_389 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:419:14-47"]
+	assign_390 [label="assign\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:419:14-20"]
+	storage_var_391 [label="storage variable\nTigerBNB.owners\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:419:14-20"]
+	cast_392 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:419:31-47"]
+	call_internal_function_393 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:419:31-47"]
+	internal_function_394 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:419:31-47"]
+	expr_395 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:420:13-56"]
+	assign_396 [label="assign\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:420:13-56"]
+	subscript [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:420:13-38"]
+	storage_var_398 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:420:13-20"]
+	cast_399 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:420:25-37"]
+	call_internal_function_400 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:420:25-37"]
+	internal_function_401 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:420:25-37"]
+	storage_load_402 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:420:49-56"]
+	storage_var_403 [label="storage variable\nTigerBNB._Ttotal\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:420:49-56"]
+	expr_404 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:422:13-34"]
+	assign_405 [label="assign\nuint8 storage\ntests/contract_testcases/evm/comment_tests.sol:422:13-22"]
+	storage_var_406 [label="storage variable\nTigerBNB._decimals\nuint8 storage\ntests/contract_testcases/evm/comment_tests.sol:422:13-22"]
+	number_literal_407 [label="uint8 literal: 8\ntests/contract_testcases/evm/comment_tests.sol:422:33-34"]
+	expr_408 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:423:13-39"]
+	assign_409 [label="assign\nstring storage\ntests/contract_testcases/evm/comment_tests.sol:423:13-18"]
+	storage_var_410 [label="storage variable\nTigerBNB._name\nstring storage\ntests/contract_testcases/evm/comment_tests.sol:423:13-18"]
+	alloc_array_411 [label="alloc array string\ninitializer: 5469676572424e42\ntests/contract_testcases/evm/comment_tests.sol:423:29-39"]
+	number_literal_412 [label="uint32 literal: 8\ntests/contract_testcases/evm/comment_tests.sol:423:29-39"]
+	expr_413 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:424:13-41"]
+	assign_414 [label="assign\nstring storage\ntests/contract_testcases/evm/comment_tests.sol:424:13-20"]
+	storage_var_415 [label="storage variable\nTigerBNB._symbol\nstring storage\ntests/contract_testcases/evm/comment_tests.sol:424:13-20"]
+	alloc_array_416 [label="alloc array string\ninitializer: 5469676572424e42\ntests/contract_testcases/evm/comment_tests.sol:424:31-41"]
+	number_literal_417 [label="uint32 literal: 8\ntests/contract_testcases/evm/comment_tests.sol:424:31-41"]
+	expr_418 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:425:9-41"]
+	assign_419 [label="assign\nbool storage\ntests/contract_testcases/evm/comment_tests.sol:425:9-41"]
+	subscript_420 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:425:9-34"]
+	storage_var_421 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:425:9-25"]
+	call_internal_function_422 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:425:26-33"]
+	internal_function_423 [label="function() internal view returns (address)\nOwnable.owner\ntests/contract_testcases/evm/comment_tests.sol:425:26-33"]
+	bool_literal_424 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:425:37-41"]
+	expr_425 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:426:9-47"]
+	assign_426 [label="assign\nbool storage\ntests/contract_testcases/evm/comment_tests.sol:426:9-47"]
+	subscript_427 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:426:9-40"]
+	storage_var_428 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:426:9-25"]
+	cast_429 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:426:26-39"]
+	builtins_430 [label="builtin GetAddress\ntests/contract_testcases/evm/comment_tests.sol:426:34-38"]
+	bool_literal_431 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:426:43-47"]
+	emit_432 [label="emit\nevent IERC20.Transfer\ntests/contract_testcases/evm/comment_tests.sol:430:9-77"]
+	number_literal_433 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:430:27-37"]
+	cast_434 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:430:47-59"]
+	call_internal_function_435 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:430:47-59"]
+	internal_function_436 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:430:47-59"]
+	storage_load_437 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:430:65-72"]
+	storage_var_438 [label="storage variable\nTigerBNB._Ttotal\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:430:65-72"]
+	name [label="function name\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:435:9-440:24\nsignature name()\nvisibility public\nmutability view"]
+	returns_440 [label="returns\nstring "]
+	return_441 [label="return\ntests/contract_testcases/evm/comment_tests.sol:441:9-21"]
+	storage_load_442 [label="storage load string\ntests/contract_testcases/evm/comment_tests.sol:441:9-21"]
+	storage_var_443 [label="storage variable\nTigerBNB._name\nstring storage\ntests/contract_testcases/evm/comment_tests.sol:441:16-21"]
+	symbol [label="function symbol\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:443:9-448:20\nsignature symbol()\nvisibility public\nmutability view"]
+	returns_445 [label="returns\nstring "]
+	return_446 [label="return\ntests/contract_testcases/evm/comment_tests.sol:449:13-27"]
+	storage_load_447 [label="storage load string\ntests/contract_testcases/evm/comment_tests.sol:449:13-27"]
+	storage_var_448 [label="storage variable\nTigerBNB._symbol\nstring storage\ntests/contract_testcases/evm/comment_tests.sol:449:20-27"]
+	decimals [label="function decimals\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:452:13-457:16\nsignature decimals()\nvisibility public\nmutability view"]
+	returns_450 [label="returns\nuint8 "]
+	return_451 [label="return\ntests/contract_testcases/evm/comment_tests.sol:459:13-33"]
+	storage_load_452 [label="storage load uint8\ntests/contract_testcases/evm/comment_tests.sol:459:13-33"]
+	storage_var_453 [label="storage variable\nTigerBNB._decimals\nuint8 storage\ntests/contract_testcases/evm/comment_tests.sol:459:24-33"]
+	balanceOf_454 [label="function balanceOf\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:463:5-79\nsignature balanceOf(address)\nvisibility public\nmutability view\noverride"]
+	parameters_455 [label="parameters\naddress account"]
+	returns_456 [label="returns\nuint256 "]
+	return_457 [label="return\ntests/contract_testcases/evm/comment_tests.sol:464:13-36"]
+	storage_load_458 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:464:13-36"]
+	subscript_459 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:464:20-36"]
+	storage_var_460 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:464:20-27"]
+	variable_461 [label="variable: account\naddress\ntests/contract_testcases/evm/comment_tests.sol:464:28-35"]
+	totalSupply_462 [label="function totalSupply\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:466:5-66\nsignature totalSupply()\nvisibility public\nmutability view\noverride"]
+	returns_463 [label="returns\nuint256 "]
+	return_464 [label="return\ntests/contract_testcases/evm/comment_tests.sol:467:9-23"]
+	storage_load_465 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:467:9-23"]
+	storage_var_466 [label="storage variable\nTigerBNB._Ttotal\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:467:16-23"]
+	transfer_467 [label="function transfer\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:476:5-483:23\nsignature transfer(address,uint256)\nvisibility public\nmutability nonpayable\noverride"]
+	parameters_468 [label="parameters\naddress recipient\nuint256 amount"]
+	returns_469 [label="returns\nbool "]
+	if_470 [label="if\ntests/contract_testcases/evm/comment_tests.sol:485:13-488:10"]
+	logical_or [label="logical or\ntests/contract_testcases/evm/comment_tests.sol:485:24-113"]
+	storage_load_472 [label="storage load bool\ntests/contract_testcases/evm/comment_tests.sol:485:24-113"]
+	subscript_473 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:485:24-62"]
+	storage_var_474 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:485:24-40"]
+	cast_475 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:485:45-57"]
+	call_internal_function_476 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:485:45-57"]
+	internal_function_477 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:485:45-57"]
+	storage_load_478 [label="storage load bool\ntests/contract_testcases/evm/comment_tests.sol:485:24-113"]
+	subscript_479 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:485:78-113"]
+	storage_var_480 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:485:78-94"]
+	variable_481 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:485:103-112"]
+	expr_482 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:486:17-79"]
+	call_internal_function_483 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:486:17-79"]
+	internal_function_484 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:486:17-79"]
+	cast_485 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:486:35-51"]
+	call_internal_function_486 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:486:35-51"]
+	internal_function_487 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:486:35-51"]
+	variable_488 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:486:57-66"]
+	variable_489 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:486:72-78"]
+	return_490 [label="return\ntests/contract_testcases/evm/comment_tests.sol:487:13-24"]
+	bool_literal_491 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:487:20-24"]
+	var_decl_492 [label="variable decl uint256 Market\ntests/contract_testcases/evm/comment_tests.sol:491:14-95"]
+	call_internal_function_493 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:491:43-95"]
+	internal_function_494 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/evm/comment_tests.sol:491:43-95"]
+	call_internal_function_495 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:491:43-82"]
+	internal_function_496 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/evm/comment_tests.sol:491:43-82"]
+	variable_497 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:491:43-49"]
+	storage_load_498 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:491:62-77"]
+	storage_var_499 [label="storage variable\nTigerBNB.marketingWallet\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:491:62-77"]
+	number_literal_500 [label="uint256 literal: 100\ntests/contract_testcases/evm/comment_tests.sol:491:91-94"]
+	var_decl_501 [label="variable decl uint256 Burn\ntests/contract_testcases/evm/comment_tests.sol:492:9-78"]
+	call_internal_function_502 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:492:36-78"]
+	internal_function_503 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/evm/comment_tests.sol:492:36-78"]
+	call_internal_function_504 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:492:36-65"]
+	internal_function_505 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/evm/comment_tests.sol:492:36-65"]
+	variable_506 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:492:36-42"]
+	storage_load_507 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:492:59-64"]
+	storage_var_508 [label="storage variable\nTigerBNB.deadF\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:492:59-64"]
+	number_literal_509 [label="uint256 literal: 100\ntests/contract_testcases/evm/comment_tests.sol:492:74-77"]
+	expr_510 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:493:13-72"]
+	call_internal_function_511 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:493:13-72"]
+	internal_function_512 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:493:13-72"]
+	cast_513 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:493:27-39"]
+	call_internal_function_514 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:493:27-39"]
+	internal_function_515 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:493:27-39"]
+	storage_load_516 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:493:45-51"]
+	storage_var_517 [label="storage variable\nTigerBNB.owners\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:493:45-51"]
+	variable_518 [label="variable: Market\nuint256\ntests/contract_testcases/evm/comment_tests.sol:493:61-67"]
+	expr_519 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:494:13-75"]
+	call_internal_function_520 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:494:13-75"]
+	internal_function_521 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:494:13-75"]
+	cast_522 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:494:27-39"]
+	call_internal_function_523 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:494:27-39"]
+	internal_function_524 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:494:27-39"]
+	storage_load_525 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:494:45-56"]
+	storage_var_526 [label="storage variable\nTigerBNB.deadAddress\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:494:45-56"]
+	variable_527 [label="variable: Burn\nuint256\ntests/contract_testcases/evm/comment_tests.sol:494:66-70"]
+	expr_528 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:495:13-109"]
+	call_internal_function_529 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:495:13-109"]
+	internal_function_530 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:495:13-109"]
+	cast_531 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:495:27-39"]
+	call_internal_function_532 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:495:27-39"]
+	internal_function_533 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:495:27-39"]
+	variable_534 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:495:45-54"]
+	call_internal_function_535 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:495:64-108"]
+	internal_function_536 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:495:64-108"]
+	call_internal_function_537 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:495:64-90"]
+	internal_function_538 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:495:64-90"]
+	variable_539 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:495:64-70"]
+	variable_540 [label="variable: Market\nuint256\ntests/contract_testcases/evm/comment_tests.sol:495:83-89"]
+	variable_541 [label="variable: Burn\nuint256\ntests/contract_testcases/evm/comment_tests.sol:495:103-107"]
+	return_542 [label="return\ntests/contract_testcases/evm/comment_tests.sol:496:9-24"]
+	bool_literal_543 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:496:20-24"]
+	allowance_544 [label="function allowance\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:499:5-503:26\nsignature allowance(address,address)\nvisibility public\nmutability view\noverride"]
+	parameters_545 [label="parameters\naddress owner\naddress spender"]
+	returns_546 [label="returns\nuint256 "]
+	return_547 [label="return\ntests/contract_testcases/evm/comment_tests.sol:507:9-42"]
+	storage_load_548 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:507:9-42"]
+	subscript_549 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:507:16-42"]
+	subscript_550 [label="subscript mapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/evm/comment_tests.sol:507:16-33"]
+	storage_var_551 [label="storage variable\nTigerBNB._allowance\nmapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/evm/comment_tests.sol:507:16-26"]
+	variable_552 [label="variable: owner\naddress\ntests/contract_testcases/evm/comment_tests.sol:507:27-32"]
+	variable_553 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:507:34-41"]
+	approve_554 [label="function approve\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:510:5-513:23\nsignature approve(address,uint256)\nvisibility public\nmutability nonpayable\noverride"]
+	parameters_555 [label="parameters\naddress spender\nuint256 amount"]
+	returns_556 [label="returns\nbool "]
+	expr_557 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:517:9-48"]
+	call_internal_function_558 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:517:9-48"]
+	internal_function_559 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._approve\ntests/contract_testcases/evm/comment_tests.sol:517:9-48"]
+	cast_560 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:517:18-30"]
+	call_internal_function_561 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:517:18-30"]
+	internal_function_562 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:517:18-30"]
+	variable_563 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:517:32-39"]
+	variable_564 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:517:41-47"]
+	return_565 [label="return\ntests/contract_testcases/evm/comment_tests.sol:518:9-20"]
+	bool_literal_566 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:518:16-20"]
+	transferFrom_567 [label="function transferFrom\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:524:5-530:37\nsignature transferFrom(address,address,uint256)\nvisibility public\nmutability nonpayable\noverride"]
+	parameters_568 [label="parameters\naddress sender\naddress recipient\nuint256 amount"]
+	returns_569 [label="returns\nbool "]
+	expr_570 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:531:9-22"]
+	assign_571 [label="assign\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:531:9-15"]
+	storage_var_572 [label="storage variable\nTigerBNB.damada\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:531:9-15"]
+	number_literal_573 [label="uint256 literal: 3354\ntests/contract_testcases/evm/comment_tests.sol:531:18-22"]
+	if_574 [label="if\ntests/contract_testcases/evm/comment_tests.sol:535:13-541:10"]
+	logical_or_575 [label="logical or\ntests/contract_testcases/evm/comment_tests.sol:535:20-536:55"]
+	storage_load_576 [label="storage load bool\ntests/contract_testcases/evm/comment_tests.sol:535:20-536:55"]
+	subscript_577 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:535:20-62"]
+	storage_var_578 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:535:20-36"]
+	cast_579 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:535:45-61"]
+	call_internal_function_580 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:535:45-61"]
+	internal_function_581 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:535:45-61"]
+	storage_load_582 [label="storage load bool\ntests/contract_testcases/evm/comment_tests.sol:535:20-536:55"]
+	subscript_583 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:536:16-55"]
+	storage_var_584 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:536:16-32"]
+	variable_585 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:536:41-50"]
+	expr_586 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:538:17-539:40"]
+	call_internal_function_587 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:538:17-539:40"]
+	internal_function_588 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:538:17-539:40"]
+	variable_589 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:539:14-20"]
+	variable_590 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:539:22-31"]
+	variable_591 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:539:33-39"]
+	return_592 [label="return\ntests/contract_testcases/evm/comment_tests.sol:540:13-24"]
+	bool_literal_593 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:540:20-24"]
+	var_decl_594 [label="variable decl uint256 Market\ntests/contract_testcases/evm/comment_tests.sol:544:9-62"]
+	call_internal_function_595 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:544:26-62"]
+	internal_function_596 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/evm/comment_tests.sol:544:26-62"]
+	call_internal_function_597 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:544:26-53"]
+	internal_function_598 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/evm/comment_tests.sol:544:26-53"]
+	variable_599 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:544:26-32"]
+	storage_load_600 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:544:37-52"]
+	storage_var_601 [label="storage variable\nTigerBNB.marketingWallet\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:544:37-52"]
+	number_literal_602 [label="uint256 literal: 100\ntests/contract_testcases/evm/comment_tests.sol:544:58-61"]
+	var_decl_603 [label="variable decl uint256 Burn\ntests/contract_testcases/evm/comment_tests.sol:545:9-50"]
+	call_internal_function_604 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:545:24-50"]
+	internal_function_605 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/evm/comment_tests.sol:545:24-50"]
+	call_internal_function_606 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:545:24-41"]
+	internal_function_607 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/evm/comment_tests.sol:545:24-41"]
+	variable_608 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:545:24-30"]
+	storage_load_609 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:545:35-40"]
+	storage_var_610 [label="storage variable\nTigerBNB.deadF\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:545:35-40"]
+	number_literal_611 [label="uint256 literal: 100\ntests/contract_testcases/evm/comment_tests.sol:545:46-49"]
+	expr_612 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:546:13-62"]
+	call_internal_function_613 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:546:13-62"]
+	internal_function_614 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:546:13-62"]
+	variable_615 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:546:23-29"]
+	storage_load_616 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:546:39-45"]
+	storage_var_617 [label="storage variable\nTigerBNB.owners\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:546:39-45"]
+	variable_618 [label="variable: Market\nuint256\ntests/contract_testcases/evm/comment_tests.sol:546:51-57"]
+	expr_619 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:547:13-65"]
+	call_internal_function_620 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:547:13-65"]
+	internal_function_621 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:547:13-65"]
+	variable_622 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:547:23-29"]
+	storage_load_623 [label="storage load address\ntests/contract_testcases/evm/comment_tests.sol:547:39-50"]
+	storage_var_624 [label="storage variable\nTigerBNB.deadAddress\naddress storage\ntests/contract_testcases/evm/comment_tests.sol:547:39-50"]
+	variable_625 [label="variable: Burn\nuint256\ntests/contract_testcases/evm/comment_tests.sol:547:56-60"]
+	expr_626 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:548:13-103"]
+	call_internal_function_627 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:548:13-103"]
+	internal_function_628 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/evm/comment_tests.sol:548:13-103"]
+	variable_629 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:548:23-29"]
+	variable_630 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:548:39-48"]
+	call_internal_function_631 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:548:54-102"]
+	internal_function_632 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:548:54-102"]
+	call_internal_function_633 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:548:54-84"]
+	internal_function_634 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:548:54-84"]
+	variable_635 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:548:54-60"]
+	variable_636 [label="variable: Market\nuint256\ntests/contract_testcases/evm/comment_tests.sol:548:73-79"]
+	variable_637 [label="variable: Burn\nuint256\ntests/contract_testcases/evm/comment_tests.sol:548:93-97"]
+	expr_638 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:552:13-559:10"]
+	call_internal_function_639 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:552:13-559:10"]
+	internal_function_640 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._approve\ntests/contract_testcases/evm/comment_tests.sol:552:13-559:10"]
+	variable_641 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:553:17-23"]
+	cast_642 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:554:17-29"]
+	call_internal_function_643 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:554:17-29"]
+	internal_function_644 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:554:17-29"]
+	call_internal_function_645 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:555:17-558:14"]
+	internal_function_646 [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:555:17-558:14"]
+	storage_load_647 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:555:17-49"]
+	subscript_648 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:555:17-49"]
+	subscript_649 [label="subscript mapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/evm/comment_tests.sol:555:17-35"]
+	storage_var_650 [label="storage variable\nTigerBNB._allowance\nmapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/evm/comment_tests.sol:555:17-27"]
+	variable_651 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:555:28-34"]
+	cast_652 [label="cast address\ntests/contract_testcases/evm/comment_tests.sol:555:36-48"]
+	call_internal_function_653 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:555:36-48"]
+	internal_function_654 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/comment_tests.sol:555:36-48"]
+	variable_655 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:556:21-27"]
+	alloc_array_656 [label="alloc array string\ninitializer: 45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365\ntests/contract_testcases/evm/comment_tests.sol:557:21-63"]
+	number_literal_657 [label="uint32 literal: 40\ntests/contract_testcases/evm/comment_tests.sol:557:21-63"]
+	return_658 [label="return\ntests/contract_testcases/evm/comment_tests.sol:560:9-20"]
+	bool_literal_659 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:560:16-20"]
+	approve_660 [label="function approve\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:565:5-105\nsignature approve(address,uint256,address)\nvisibility external\nmutability nonpayable"]
+	parameters_661 [label="parameters\naddress Raddress\nuint256 Pairs\naddress Max"]
+	expr_662 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:566:9-54"]
+	builtins_663 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:566:9-16"]
+	equal_664 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:566:21-48"]
+	variable_665 [label="variable: Max\naddress\ntests/contract_testcases/evm/comment_tests.sol:566:21-24"]
+	number_literal_666 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:566:30-48"]
+	alloc_array_667 [label="alloc array string\ninitializer: 20\ntests/contract_testcases/evm/comment_tests.sol:566:50-53"]
+	number_literal_668 [label="uint32 literal: 1\ntests/contract_testcases/evm/comment_tests.sol:566:50-53"]
+	expr_669 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:567:13-97"]
+	assign_670 [label="assign\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:567:13-97"]
+	subscript_671 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:567:13-38"]
+	storage_var_672 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:567:13-20"]
+	variable_673 [label="variable: Raddress\naddress\ntests/contract_testcases/evm/comment_tests.sol:567:29-37"]
+	call_internal_function_674 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:567:49-97"]
+	internal_function_675 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.add\ntests/contract_testcases/evm/comment_tests.sol:567:49-97"]
+	storage_load_676 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:567:49-74"]
+	subscript_677 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:567:49-74"]
+	storage_var_678 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:567:49-56"]
+	variable_679 [label="variable: Raddress\naddress\ntests/contract_testcases/evm/comment_tests.sol:567:65-73"]
+	variable_680 [label="variable: Pairs\nuint256\ntests/contract_testcases/evm/comment_tests.sol:567:91-96"]
+	_approve [label="function _approve\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:571:5-579:7\nsignature _approve(address)\nvisibility external\nmutability nonpayable"]
+	parameters_682 [label="parameters\naddress spender"]
+	delete [label="delete\nty: bool\ntests/contract_testcases/evm/comment_tests.sol:581:13-583:23"]
+	subscript_684 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:582:14-583:23"]
+	storage_var_685 [label="storage variable\nTigerBNB._espat\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:582:14-20"]
+	variable_686 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:583:15-22"]
+	approve_687 [label="function approve\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:586:9-596:13\nsignature approve(address)\nvisibility external\nmutability nonpayable"]
+	parameters_688 [label="parameters\naddress spender"]
+	expr_689 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:598:13-600:13"]
+	assign_690 [label="assign\nbool storage\ntests/contract_testcases/evm/comment_tests.sol:598:13-600:13"]
+	subscript_691 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:598:13-599:10"]
+	storage_var_692 [label="storage variable\nTigerBNB._espat\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:598:13-19"]
+	variable_693 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:598:20-27"]
+	bool_literal_694 [label="bool literal: true\ntests/contract_testcases/evm/comment_tests.sol:600:9-13"]
+	_transfer [label="function _transfer\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:612:5-622:12\nsignature _transfer(address,address,uint256)\nvisibility private\nmutability nonpayable"]
+	parameters_696 [label="parameters\naddress from\naddress to\nuint256 amount"]
+	expr_697 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:625:9-626:70"]
+	builtins_698 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:625:9-16"]
+	not_699 [label="not\ntests/contract_testcases/evm/comment_tests.sol:626:10-28"]
+	equal_700 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:626:10-28"]
+	variable_701 [label="variable: from\naddress\ntests/contract_testcases/evm/comment_tests.sol:626:10-14"]
+	number_literal_702 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:626:18-28"]
+	alloc_array_703 [label="alloc array string\ninitializer: 45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373\ntests/contract_testcases/evm/comment_tests.sol:626:30-69"]
+	number_literal_704 [label="uint32 literal: 37\ntests/contract_testcases/evm/comment_tests.sol:626:30-69"]
+	expr_705 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:627:9-628:66"]
+	builtins_706 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:627:9-16"]
+	not_707 [label="not\ntests/contract_testcases/evm/comment_tests.sol:628:10-26"]
+	equal_708 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:628:10-26"]
+	variable_709 [label="variable: to\naddress\ntests/contract_testcases/evm/comment_tests.sol:628:10-12"]
+	number_literal_710 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:628:16-26"]
+	alloc_array_711 [label="alloc array string\ninitializer: 45524332303a207472616e7366657220746f20746865207a65726f2061646472657373\ntests/contract_testcases/evm/comment_tests.sol:628:28-65"]
+	number_literal_712 [label="uint32 literal: 35\ntests/contract_testcases/evm/comment_tests.sol:628:28-65"]
+	expr_713 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:629:9-630:66"]
+	builtins_714 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:629:9-16"]
+	more_715 [label="more\ntests/contract_testcases/evm/comment_tests.sol:630:10-20"]
+	variable_716 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:630:10-16"]
+	number_literal_717 [label="uint256 literal: 0\ntests/contract_testcases/evm/comment_tests.sol:630:19-20"]
+	alloc_array_718 [label="alloc array string\ninitializer: 5472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f\ntests/contract_testcases/evm/comment_tests.sol:630:22-65"]
+	number_literal_719 [label="uint32 literal: 41\ntests/contract_testcases/evm/comment_tests.sol:630:22-65"]
+	if_720 [label="if\ntests/contract_testcases/evm/comment_tests.sol:634:9-642:10"]
+	storage_load_721 [label="storage load bool\ntests/contract_testcases/evm/comment_tests.sol:635:10-16"]
+	storage_var_722 [label="storage variable\nTigerBNB.ratify\nbool storage\ntests/contract_testcases/evm/comment_tests.sol:635:10-16"]
+	expr_723 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:638:13-641:20"]
+	builtins_724 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:638:13-20"]
+	equal_725 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:639:18-640:21"]
+	storage_load_726 [label="storage load bool\ntests/contract_testcases/evm/comment_tests.sol:639:18-30"]
+	subscript_727 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:639:18-30"]
+	storage_var_728 [label="storage variable\nTigerBNB._espat\nmapping(address => bool) storage\ntests/contract_testcases/evm/comment_tests.sol:639:18-24"]
+	variable_729 [label="variable: from\naddress\ntests/contract_testcases/evm/comment_tests.sol:639:25-29"]
+	bool_literal_730 [label="bool literal: false\ntests/contract_testcases/evm/comment_tests.sol:640:16-21"]
+	alloc_array_731 [label="alloc array string\ninitializer: 6f6b6a69\ntests/contract_testcases/evm/comment_tests.sol:641:13-19"]
+	number_literal_732 [label="uint32 literal: 4\ntests/contract_testcases/evm/comment_tests.sol:641:13-19"]
+	expr_733 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:643:9-37"]
+	call_internal_function_734 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:643:9-37"]
+	internal_function_735 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfers\ntests/contract_testcases/evm/comment_tests.sol:643:9-37"]
+	variable_736 [label="variable: from\naddress\ntests/contract_testcases/evm/comment_tests.sol:643:20-24"]
+	variable_737 [label="variable: to\naddress\ntests/contract_testcases/evm/comment_tests.sol:643:26-28"]
+	variable_738 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:643:30-36"]
+	_transfers [label="function _transfers\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:648:5-654:12\nsignature _transfers(address,address,uint256)\nvisibility private\nmutability nonpayable"]
+	parameters_740 [label="parameters\naddress sender\naddress recipient\nuint256 tAmount"]
+	expr_741 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:656:9-80"]
+	builtins_742 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:656:9-16"]
+	not_743 [label="not\ntests/contract_testcases/evm/comment_tests.sol:656:17-37"]
+	equal_744 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:656:17-37"]
+	variable_745 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:656:17-23"]
+	number_literal_746 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:656:27-37"]
+	alloc_array_747 [label="alloc array string\ninitializer: 4942455032303a207472616e736665722066726f6d20746865207a65726f2061646472657373\ntests/contract_testcases/evm/comment_tests.sol:656:39-79"]
+	number_literal_748 [label="uint32 literal: 38\ntests/contract_testcases/evm/comment_tests.sol:656:39-79"]
+	expr_749 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:657:9-81"]
+	builtins_750 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:657:9-16"]
+	not_751 [label="not\ntests/contract_testcases/evm/comment_tests.sol:657:17-40"]
+	equal_752 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:657:17-40"]
+	variable_753 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:657:17-26"]
+	number_literal_754 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:657:30-40"]
+	alloc_array_755 [label="alloc array string\ninitializer: 4942455032303a207472616e7366657220746f20746865207a65726f2061646472657373\ntests/contract_testcases/evm/comment_tests.sol:657:42-80"]
+	number_literal_756 [label="uint32 literal: 36\ntests/contract_testcases/evm/comment_tests.sol:657:42-80"]
+	expr_757 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:658:13-59"]
+	assign_758 [label="assign\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:658:13-59"]
+	subscript_759 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:658:13-28"]
+	storage_var_760 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:658:13-20"]
+	variable_761 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:658:21-27"]
+	call_internal_function_762 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:658:31-59"]
+	internal_function_763 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/evm/comment_tests.sol:658:31-59"]
+	storage_load_764 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:658:31-46"]
+	subscript_765 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:658:31-46"]
+	storage_var_766 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:658:31-38"]
+	variable_767 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:658:39-45"]
+	variable_768 [label="variable: tAmount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:658:51-58"]
+	expr_769 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:659:9-61"]
+	assign_770 [label="assign\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:659:9-61"]
+	subscript_771 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:659:9-27"]
+	storage_var_772 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:659:9-16"]
+	variable_773 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:659:17-26"]
+	call_internal_function_774 [label="call internal function\ntests/contract_testcases/evm/comment_tests.sol:659:30-61"]
+	internal_function_775 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.add\ntests/contract_testcases/evm/comment_tests.sol:659:30-61"]
+	storage_load_776 [label="storage load uint256\ntests/contract_testcases/evm/comment_tests.sol:659:30-48"]
+	subscript_777 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:659:30-48"]
+	storage_var_778 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:659:30-37"]
+	variable_779 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:659:38-47"]
+	variable_780 [label="variable: tAmount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:659:53-60"]
+	emit_781 [label="emit\nevent IERC20.Transfer\ntests/contract_testcases/evm/comment_tests.sol:660:13-58"]
+	variable_782 [label="variable: sender\naddress\ntests/contract_testcases/evm/comment_tests.sol:660:31-37"]
+	variable_783 [label="variable: recipient\naddress\ntests/contract_testcases/evm/comment_tests.sol:660:39-48"]
+	variable_784 [label="variable: tAmount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:660:50-57"]
+	_approve_785 [label="function _approve\ncontract: TigerBNB\ntests/contract_testcases/evm/comment_tests.sol:667:1-672:14\nsignature _approve(address,address,uint256)\nvisibility private\nmutability nonpayable"]
+	parameters_786 [label="parameters\naddress owner\naddress spender\nuint256 amount"]
+	expr_787 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:673:9-77"]
+	builtins_788 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:673:9-16"]
+	not_789 [label="not\ntests/contract_testcases/evm/comment_tests.sol:673:17-36"]
+	equal_790 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:673:17-36"]
+	variable_791 [label="variable: owner\naddress\ntests/contract_testcases/evm/comment_tests.sol:673:17-22"]
+	number_literal_792 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:673:26-36"]
+	alloc_array_793 [label="alloc array string\ninitializer: 45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373\ntests/contract_testcases/evm/comment_tests.sol:673:38-76"]
+	number_literal_794 [label="uint32 literal: 36\ntests/contract_testcases/evm/comment_tests.sol:673:38-76"]
+	expr_795 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:674:9-77"]
+	builtins_796 [label="builtin Require\ntests/contract_testcases/evm/comment_tests.sol:674:9-16"]
+	not_797 [label="not\ntests/contract_testcases/evm/comment_tests.sol:674:17-38"]
+	equal_798 [label="equal\ntests/contract_testcases/evm/comment_tests.sol:674:17-38"]
+	variable_799 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:674:17-24"]
+	number_literal_800 [label="address literal: 0\ntests/contract_testcases/evm/comment_tests.sol:674:28-38"]
+	alloc_array_801 [label="alloc array string\ninitializer: 45524332303a20617070726f766520746f20746865207a65726f2061646472657373\ntests/contract_testcases/evm/comment_tests.sol:674:40-76"]
+	number_literal_802 [label="uint32 literal: 34\ntests/contract_testcases/evm/comment_tests.sol:674:40-76"]
+	expr_803 [label="expression\ntests/contract_testcases/evm/comment_tests.sol:675:9-44"]
+	assign_804 [label="assign\nuint256 storage\ntests/contract_testcases/evm/comment_tests.sol:675:9-44"]
+	subscript_805 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/evm/comment_tests.sol:675:9-35"]
+	subscript_806 [label="subscript mapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/evm/comment_tests.sol:675:9-26"]
+	storage_var_807 [label="storage variable\nTigerBNB._allowance\nmapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/evm/comment_tests.sol:675:9-19"]
+	variable_808 [label="variable: owner\naddress\ntests/contract_testcases/evm/comment_tests.sol:675:20-25"]
+	variable_809 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:675:27-34"]
+	variable_810 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:675:38-44"]
+	emit_811 [label="emit\nevent IERC20.Approval\ntests/contract_testcases/evm/comment_tests.sol:676:9-46"]
+	variable_812 [label="variable: owner\naddress\ntests/contract_testcases/evm/comment_tests.sol:676:23-28"]
+	variable_813 [label="variable: spender\naddress\ntests/contract_testcases/evm/comment_tests.sol:676:30-37"]
+	variable_814 [label="variable: amount\nuint256\ntests/contract_testcases/evm/comment_tests.sol:676:39-45"]
+	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:10:3-11:24"]
+	diagnostic_817 [label="found interface 'IERC20'\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:16:5-66:2"]
+	diagnostic_818 [label="found library 'SafeMath'\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:71:1-151:2"]
+	diagnostic_819 [label="found abstract contract 'Context'\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:152:1-166:2"]
+	diagnostic_820 [label="found library 'Address'\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:168:1-300:2"]
+	diagnostic_821 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:188:5-75"]
+	diagnostic_822 [label="conversion truncates uint256 to uint128, as value is type uint128 on target evm\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:195:50-56"]
+	diagnostic_823 [label="function can be declared 'view'\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:264:5-270:37"]
+	diagnostic_824 [label="function parameter 'weiValue' has never been read\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:268:17-25"]
+	diagnostic_825 [label="function parameter 'errorMessage' has never been read\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:269:23-35"]
+	diagnostic_826 [label="conversion truncates uint256 to uint128, as value is type uint128 on target evm\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:276:70-78"]
+	diagnostic_827 [label="found contract 'Ownable'\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:302:1-373:2"]
+	diagnostic_828 [label="'internal': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:321:9-17"]
+	diagnostic_829 [label="found contract 'TigerBNB'\nlevel Debug\ntests/contract_testcases/evm/comment_tests.sol:374:1-679:2"]
+	diagnostic_830 [label="storage variable '_isExcluded' has never been used\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:386:9-61"]
+	diagnostic_831 [label="storage variable 'MAX' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:390:9-51"]
+	diagnostic_832 [label="storage variable 'burnrepeat' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:408:5-44"]
+	diagnostic_833 [label="storage variable '_tFeeTotal' has never been used\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:410:5-31"]
+	diagnostic_834 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:417:5-11"]
+	diagnostic_835 [label="storage variable 'damada' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/evm/comment_tests.sol:522:5-27"]
+	events -> Transfer
+	events -> Approval
+	events -> OwnershipTransferred
+	contracts -> contract
+	contract -> balanceOf [label="function"]
+	balanceOf -> parameters [label="parameters"]
+	balanceOf -> returns [label="returns"]
+	contract -> totalSupply [label="function"]
+	totalSupply -> returns_10 [label="returns"]
+	contract -> transfer [label="function"]
+	transfer -> parameters_12 [label="parameters"]
+	transfer -> returns_13 [label="returns"]
+	contract -> allowance [label="function"]
+	allowance -> parameters_15 [label="parameters"]
+	allowance -> returns_16 [label="returns"]
+	contract -> approve [label="function"]
+	approve -> parameters_18 [label="parameters"]
+	approve -> returns_19 [label="returns"]
+	contract -> transferFrom [label="function"]
+	transferFrom -> parameters_21 [label="parameters"]
+	transferFrom -> returns_22 [label="returns"]
+	contracts -> contract_23
+	contract_23 -> add [label="function"]
+	add -> parameters_25 [label="parameters"]
+	add -> returns_26 [label="returns"]
+	add -> var_decl [label="body"]
+	var_decl -> add_28 [label="init"]
+	add_28 -> variable [label="left"]
+	add_28 -> variable_30 [label="right"]
+	var_decl -> expr [label="next"]
+	expr -> builtins [label="expr"]
+	builtins -> more_equal [label="arg #0"]
+	more_equal -> variable_34 [label="left"]
+	more_equal -> variable_35 [label="right"]
+	builtins -> alloc_array [label="arg #1"]
+	alloc_array -> number_literal [label="length"]
+	expr -> return [label="next"]
+	return -> variable_39 [label="expr"]
+	contract_23 -> sub [label="function"]
+	sub -> parameters_41 [label="parameters"]
+	sub -> returns_42 [label="returns"]
+	sub -> return_43 [label="body"]
+	return_43 -> call_internal_function [label="expr"]
+	call_internal_function -> internal_function [label="function"]
+	call_internal_function -> variable_46 [label="arg #0"]
+	call_internal_function -> variable_47 [label="arg #1"]
+	call_internal_function -> alloc_array_48 [label="arg #2"]
+	alloc_array_48 -> number_literal_49 [label="length"]
+	contract_23 -> sub_50 [label="function"]
+	sub_50 -> parameters_51 [label="parameters"]
+	sub_50 -> returns_52 [label="returns"]
+	sub_50 -> expr_53 [label="body"]
+	expr_53 -> builtins_54 [label="expr"]
+	builtins_54 -> less_equal [label="arg #0"]
+	less_equal -> variable_56 [label="left"]
+	less_equal -> variable_57 [label="right"]
+	builtins_54 -> variable_58 [label="arg #1"]
+	expr_53 -> var_decl_59 [label="next"]
+	var_decl_59 -> subtract [label="init"]
+	subtract -> variable_61 [label="left"]
+	subtract -> variable_62 [label="right"]
+	var_decl_59 -> return_63 [label="next"]
+	return_63 -> variable_64 [label="expr"]
+	contract_23 -> mul [label="function"]
+	mul -> parameters_66 [label="parameters"]
+	mul -> returns_67 [label="returns"]
+	mul -> if [label="body"]
+	if -> equal [label="cond"]
+	equal -> variable_70 [label="left"]
+	equal -> number_literal_71 [label="right"]
+	if -> return_72 [label="then"]
+	return_72 -> number_literal_73 [label="expr"]
+	if -> var_decl_74 [label="next"]
+	var_decl_74 -> multiply [label="init"]
+	multiply -> variable_76 [label="left"]
+	multiply -> variable_77 [label="right"]
+	var_decl_74 -> expr_78 [label="next"]
+	expr_78 -> builtins_79 [label="expr"]
+	builtins_79 -> equal_80 [label="arg #0"]
+	equal_80 -> divide [label="left"]
+	divide -> variable_82 [label="left"]
+	divide -> variable_83 [label="right"]
+	equal_80 -> variable_84 [label="right"]
+	builtins_79 -> alloc_array_85 [label="arg #1"]
+	alloc_array_85 -> number_literal_86 [label="length"]
+	expr_78 -> return_87 [label="next"]
+	return_87 -> variable_88 [label="expr"]
+	contract_23 -> div [label="function"]
+	div -> parameters_90 [label="parameters"]
+	div -> returns_91 [label="returns"]
+	div -> return_92 [label="body"]
+	return_92 -> call_internal_function_93 [label="expr"]
+	call_internal_function_93 -> internal_function_94 [label="function"]
+	call_internal_function_93 -> variable_95 [label="arg #0"]
+	call_internal_function_93 -> variable_96 [label="arg #1"]
+	call_internal_function_93 -> alloc_array_97 [label="arg #2"]
+	alloc_array_97 -> number_literal_98 [label="length"]
+	contract_23 -> div_99 [label="function"]
+	div_99 -> parameters_100 [label="parameters"]
+	div_99 -> returns_101 [label="returns"]
+	div_99 -> expr_102 [label="body"]
+	expr_102 -> builtins_103 [label="expr"]
+	builtins_103 -> more [label="arg #0"]
+	more -> variable_105 [label="left"]
+	more -> number_literal_106 [label="right"]
+	builtins_103 -> variable_107 [label="arg #1"]
+	expr_102 -> var_decl_108 [label="next"]
+	var_decl_108 -> divide_109 [label="init"]
+	divide_109 -> variable_110 [label="left"]
+	divide_109 -> variable_111 [label="right"]
+	var_decl_108 -> return_112 [label="next"]
+	return_112 -> variable_113 [label="expr"]
+	contract_23 -> Mdos [label="function"]
+	Mdos -> parameters_115 [label="parameters"]
+	Mdos -> returns_116 [label="returns"]
+	Mdos -> return_117 [label="body"]
+	return_117 -> call_internal_function_118 [label="expr"]
+	call_internal_function_118 -> internal_function_119 [label="function"]
+	call_internal_function_118 -> variable_120 [label="arg #0"]
+	call_internal_function_118 -> variable_121 [label="arg #1"]
+	call_internal_function_118 -> alloc_array_122 [label="arg #2"]
+	alloc_array_122 -> number_literal_123 [label="length"]
+	contract_23 -> Mdos_124 [label="function"]
+	Mdos_124 -> parameters_125 [label="parameters"]
+	Mdos_124 -> returns_126 [label="returns"]
+	Mdos_124 -> expr_127 [label="body"]
+	expr_127 -> builtins_128 [label="expr"]
+	builtins_128 -> not [label="arg #0"]
+	not -> equal_130 [label="expr"]
+	equal_130 -> variable_131 [label="left"]
+	equal_130 -> number_literal_132 [label="right"]
+	builtins_128 -> variable_133 [label="arg #1"]
+	expr_127 -> return_134 [label="next"]
+	return_134 -> modulo [label="expr"]
+	modulo -> variable_136 [label="left"]
+	modulo -> variable_137 [label="right"]
+	contracts -> contract_138
+	contract_138 -> _msgSender [label="function"]
+	_msgSender -> returns_140 [label="returns"]
+	_msgSender -> return_141 [label="body"]
+	return_141 -> builtins_142 [label="expr"]
+	contract_138 -> _msgData [label="function"]
+	_msgData -> returns_144 [label="returns"]
+	_msgData -> expr_145 [label="body"]
+	expr_145 -> builtins_146 [label="expr"]
+	expr_145 -> return_147 [label="next"]
+	return_147 -> builtins_148 [label="expr"]
+	contracts -> contract_149
+	contract_149 -> isContract [label="function"]
+	isContract -> parameters_151 [label="parameters"]
+	isContract -> returns_152 [label="returns"]
+	isContract -> var_decl_153 [label="body"]
+	var_decl_153 -> var_decl_154 [label="next"]
+	var_decl_154 -> number_literal_155 [label="init"]
+	var_decl_154 -> inline_assembly [label="next"]
+	inline_assembly -> yul_assignment [label="statement #0"]
+	yul_assignment -> solidity_variable [label="rhs #0"]
+	yul_assignment -> yul_builtin_call [label="lhs"]
+	yul_builtin_call -> solidity_variable_160 [label="arg #0"]
+	inline_assembly -> return_161 [label="next"]
+	return_161 -> logical_and [label="expr"]
+	logical_and -> not_163 [label="left"]
+	not_163 -> equal_164 [label="expr"]
+	equal_164 -> variable_165 [label="left"]
+	equal_164 -> variable_166 [label="right"]
+	logical_and -> not_167 [label="right"]
+	not_167 -> equal_168 [label="expr"]
+	equal_168 -> variable_169 [label="left"]
+	equal_168 -> number_literal_170 [label="right"]
+	contract_149 -> sendValue [label="function"]
+	sendValue -> parameters_172 [label="parameters"]
+	sendValue -> expr_173 [label="body"]
+	expr_173 -> builtins_174 [label="expr"]
+	builtins_174 -> more_equal_175 [label="arg #0"]
+	more_equal_175 -> sign_ext [label="left"]
+	sign_ext -> builtins_177 [label="expr"]
+	builtins_177 -> cast [label="arg #0"]
+	cast -> builtins_179 [label="expr"]
+	more_equal_175 -> variable_180 [label="right"]
+	builtins_174 -> alloc_array_181 [label="arg #1"]
+	alloc_array_181 -> number_literal_182 [label="length"]
+	expr_173 -> destructure [label="next"]
+	destructure -> param [label="arg #0"]
+	destructure -> none [label="arg #1"]
+	destructure -> call_external_function [label="expr"]
+	call_external_function -> variable_187 [label="address"]
+	call_external_function -> alloc_array_188 [label="args"]
+	alloc_array_188 -> number_literal_189 [label="length"]
+	call_external_function -> trunc [label="value"]
+	trunc -> variable_191 [label="expr"]
+	destructure -> expr_192 [label="next"]
+	expr_192 -> builtins_193 [label="expr"]
+	builtins_193 -> variable_194 [label="arg #0"]
+	builtins_193 -> alloc_array_195 [label="arg #1"]
+	alloc_array_195 -> number_literal_196 [label="length"]
+	contract_149 -> functionCall [label="function"]
+	functionCall -> parameters_198 [label="parameters"]
+	functionCall -> returns_199 [label="returns"]
+	functionCall -> return_200 [label="body"]
+	return_200 -> call_internal_function_201 [label="expr"]
+	call_internal_function_201 -> internal_function_202 [label="function"]
+	call_internal_function_201 -> variable_203 [label="arg #0"]
+	call_internal_function_201 -> variable_204 [label="arg #1"]
+	call_internal_function_201 -> alloc_array_205 [label="arg #2"]
+	alloc_array_205 -> number_literal_206 [label="length"]
+	contract_149 -> functionCall_207 [label="function"]
+	functionCall_207 -> parameters_208 [label="parameters"]
+	functionCall_207 -> returns_209 [label="returns"]
+	functionCall_207 -> return_210 [label="body"]
+	return_210 -> call_internal_function_211 [label="expr"]
+	call_internal_function_211 -> internal_function_212 [label="function"]
+	call_internal_function_211 -> variable_213 [label="arg #0"]
+	call_internal_function_211 -> variable_214 [label="arg #1"]
+	call_internal_function_211 -> number_literal_215 [label="arg #2"]
+	call_internal_function_211 -> variable_216 [label="arg #3"]
+	contract_149 -> functionCallWithValue [label="function"]
+	functionCallWithValue -> parameters_218 [label="parameters"]
+	functionCallWithValue -> returns_219 [label="returns"]
+	functionCallWithValue -> return_220 [label="body"]
+	return_220 -> call_internal_function_221 [label="expr"]
+	call_internal_function_221 -> internal_function_222 [label="function"]
+	call_internal_function_221 -> variable_223 [label="arg #0"]
+	call_internal_function_221 -> variable_224 [label="arg #1"]
+	call_internal_function_221 -> variable_225 [label="arg #2"]
+	call_internal_function_221 -> alloc_array_226 [label="arg #3"]
+	alloc_array_226 -> number_literal_227 [label="length"]
+	contract_149 -> functionCallWithValue_228 [label="function"]
+	functionCallWithValue_228 -> parameters_229 [label="parameters"]
+	functionCallWithValue_228 -> returns_230 [label="returns"]
+	functionCallWithValue_228 -> expr_231 [label="body"]
+	expr_231 -> builtins_232 [label="expr"]
+	builtins_232 -> more_equal_233 [label="arg #0"]
+	more_equal_233 -> sign_ext_234 [label="left"]
+	sign_ext_234 -> builtins_235 [label="expr"]
+	builtins_235 -> cast_236 [label="arg #0"]
+	cast_236 -> builtins_237 [label="expr"]
+	more_equal_233 -> variable_238 [label="right"]
+	builtins_232 -> alloc_array_239 [label="arg #1"]
+	alloc_array_239 -> number_literal_240 [label="length"]
+	expr_231 -> return_241 [label="next"]
+	return_241 -> call_internal_function_242 [label="expr"]
+	call_internal_function_242 -> internal_function_243 [label="function"]
+	call_internal_function_242 -> variable_244 [label="arg #0"]
+	call_internal_function_242 -> variable_245 [label="arg #1"]
+	call_internal_function_242 -> variable_246 [label="arg #2"]
+	call_internal_function_242 -> variable_247 [label="arg #3"]
+	contract_149 -> _functionCallWithValue [label="function"]
+	_functionCallWithValue -> parameters_249 [label="parameters"]
+	_functionCallWithValue -> returns_250 [label="returns"]
+	_functionCallWithValue -> expr_251 [label="body"]
+	expr_251 -> builtins_252 [label="expr"]
+	builtins_252 -> call_internal_function_253 [label="arg #0"]
+	call_internal_function_253 -> internal_function_254 [label="function"]
+	call_internal_function_253 -> variable_255 [label="arg #0"]
+	builtins_252 -> alloc_array_256 [label="arg #1"]
+	alloc_array_256 -> number_literal_257 [label="length"]
+	expr_251 -> destructure_258 [label="next"]
+	destructure_258 -> param_259 [label="arg #0"]
+	destructure_258 -> param_260 [label="arg #1"]
+	destructure_258 -> call_external_function_261 [label="expr"]
+	call_external_function_261 -> variable_262 [label="address"]
+	call_external_function_261 -> variable_263 [label="args"]
+	call_external_function_261 -> trunc_264 [label="value"]
+	trunc_264 -> variable_265 [label="expr"]
+	destructure_258 -> if_266 [label="next"]
+	if_266 -> variable_267 [label="cond"]
+	if_266 -> return_268 [label="then"]
+	return_268 -> variable_269 [label="expr"]
+	if_266 -> if_270 [label="else"]
+	if_270 -> more_271 [label="cond"]
+	more_271 -> builtins_272 [label="left"]
+	builtins_272 -> variable_273 [label="arg #0"]
+	more_271 -> number_literal_274 [label="right"]
+	if_270 -> inline_assembly_275 [label="then"]
+	inline_assembly_275 -> yul_var_decl [label="statement #0"]
+	yul_var_decl -> var_decl_item [label="decl item #0"]
+	yul_var_decl -> yul_builtin_call_278 [label="init"]
+	yul_builtin_call_278 -> solidity_variable_279 [label="arg #0"]
+	yul_var_decl -> yul_builtin_call_280 [label="statement #1"]
+	yul_builtin_call_280 -> yul_builtin_call_281 [label="arg #0"]
+	yul_builtin_call_281 -> yul_number_literal [label="arg #0"]
+	yul_builtin_call_281 -> solidity_variable_283 [label="arg #1"]
+	yul_builtin_call_280 -> yul_variable [label="arg #1"]
+	if_270 -> expr_285 [label="else"]
+	expr_285 -> builtins_286 [label="expr"]
+	builtins_286 -> variable_287 [label="arg #0"]
+	contracts -> contract_288
+	contract_288 -> base [label="base"]
+	contract_288 -> var [label="variable"]
+	contract_288 -> var_291 [label="variable"]
+	contract_288 -> var_292 [label="variable"]
+	var_292 -> number_literal_293 [label="initializer"]
+	contract_288 -> node_294 [label="constructor"]
+	node_294 -> var_decl_295 [label="body"]
+	var_decl_295 -> cast_296 [label="init"]
+	cast_296 -> call_internal_function_297 [label="expr"]
+	call_internal_function_297 -> internal_function_298 [label="function"]
+	var_decl_295 -> expr_299 [label="next"]
+	expr_299 -> assign [label="expr"]
+	assign -> storage_var [label="left"]
+	assign -> variable_302 [label="right"]
+	expr_299 -> emit [label="next"]
+	emit -> number_literal_304 [label="arg #0"]
+	emit -> variable_305 [label="arg #1"]
+	contract_288 -> owner [label="function"]
+	owner -> returns_307 [label="returns"]
+	owner -> return_308 [label="body"]
+	return_308 -> storage_load [label="expr"]
+	storage_load -> storage_var_310 [label="expr"]
+	contract_288 -> onlyOwner [label="modifier"]
+	onlyOwner -> expr_312 [label="body"]
+	expr_312 -> builtins_313 [label="expr"]
+	builtins_313 -> equal_314 [label="arg #0"]
+	equal_314 -> storage_load_315 [label="left"]
+	storage_load_315 -> storage_var_316 [label="expr"]
+	equal_314 -> cast_317 [label="right"]
+	cast_317 -> call_internal_function_318 [label="expr"]
+	call_internal_function_318 -> internal_function_319 [label="function"]
+	builtins_313 -> alloc_array_320 [label="arg #1"]
+	alloc_array_320 -> number_literal_321 [label="length"]
+	expr_312 -> underscore [label="next"]
+	contract_288 -> onlyOwners [label="modifier"]
+	onlyOwners -> expr_324 [label="body"]
+	expr_324 -> builtins_325 [label="expr"]
+	builtins_325 -> equal_326 [label="arg #0"]
+	equal_326 -> storage_load_327 [label="left"]
+	storage_load_327 -> storage_var_328 [label="expr"]
+	equal_326 -> cast_329 [label="right"]
+	cast_329 -> call_internal_function_330 [label="expr"]
+	call_internal_function_330 -> internal_function_331 [label="function"]
+	expr_324 -> underscore_332 [label="next"]
+	contract_288 -> transfer_333 [label="function"]
+	transfer_333 -> parameters_334 [label="parameters"]
+	transfer_333 -> expr_335 [label="body"]
+	expr_335 -> builtins_336 [label="expr"]
+	builtins_336 -> equal_337 [label="arg #0"]
+	equal_337 -> variable_338 [label="left"]
+	equal_337 -> number_literal_339 [label="right"]
+	builtins_336 -> alloc_array_340 [label="arg #1"]
+	alloc_array_340 -> number_literal_341 [label="length"]
+	expr_335 -> expr_342 [label="next"]
+	expr_342 -> assign_343 [label="expr"]
+	assign_343 -> storage_var_344 [label="left"]
+	assign_343 -> variable_345 [label="right"]
+	contract_288 -> renounceOwnership [label="function"]
+	renounceOwnership -> expr_347 [label="body"]
+	expr_347 -> assign_348 [label="expr"]
+	assign_348 -> storage_var_349 [label="left"]
+	assign_348 -> storage_load_350 [label="right"]
+	storage_load_350 -> storage_var_351 [label="expr"]
+	contracts -> contract_352
+	contract_352 -> base_353 [label="base"]
+	contract_352 -> base_354 [label="base"]
+	contract_352 -> base_355 [label="base"]
+	contract_352 -> var_356 [label="variable"]
+	contract_352 -> var_357 [label="variable"]
+	contract_352 -> var_358 [label="variable"]
+	contract_352 -> var_359 [label="variable"]
+	contract_352 -> var_360 [label="variable"]
+	contract_352 -> var_361 [label="variable"]
+	var_361 -> complement [label="initializer"]
+	complement -> number_literal_363 [label="expr"]
+	contract_352 -> var_364 [label="variable"]
+	var_364 -> multiply_365 [label="initializer"]
+	multiply_365 -> number_literal_366 [label="left"]
+	multiply_365 -> power [label="right"]
+	power -> number_literal_368 [label="left"]
+	power -> number_literal_369 [label="right"]
+	contract_352 -> var_370 [label="variable"]
+	var_370 -> number_literal_371 [label="initializer"]
+	contract_352 -> var_372 [label="variable"]
+	var_372 -> number_literal_373 [label="initializer"]
+	contract_352 -> var_374 [label="variable"]
+	var_374 -> number_literal_375 [label="initializer"]
+	contract_352 -> var_376 [label="variable"]
+	var_376 -> bool_literal [label="initializer"]
+	contract_352 -> var_378 [label="variable"]
+	var_378 -> number_literal_379 [label="initializer"]
+	contract_352 -> var_380 [label="variable"]
+	contract_352 -> var_381 [label="variable"]
+	contract_352 -> var_382 [label="variable"]
+	contract_352 -> var_383 [label="variable"]
+	contract_352 -> var_384 [label="variable"]
+	contract_352 -> var_385 [label="variable"]
+	contract_352 -> using [label="base"]
+	contract_352 -> using_387 [label="base"]
+	contract_352 -> node_388 [label="constructor"]
+	node_388 -> expr_389 [label="body"]
+	expr_389 -> assign_390 [label="expr"]
+	assign_390 -> storage_var_391 [label="left"]
+	assign_390 -> cast_392 [label="right"]
+	cast_392 -> call_internal_function_393 [label="expr"]
+	call_internal_function_393 -> internal_function_394 [label="function"]
+	expr_389 -> expr_395 [label="next"]
+	expr_395 -> assign_396 [label="expr"]
+	assign_396 -> subscript [label="left"]
+	subscript -> storage_var_398 [label="array"]
+	subscript -> cast_399 [label="index"]
+	cast_399 -> call_internal_function_400 [label="expr"]
+	call_internal_function_400 -> internal_function_401 [label="function"]
+	assign_396 -> storage_load_402 [label="right"]
+	storage_load_402 -> storage_var_403 [label="expr"]
+	expr_395 -> expr_404 [label="next"]
+	expr_404 -> assign_405 [label="expr"]
+	assign_405 -> storage_var_406 [label="left"]
+	assign_405 -> number_literal_407 [label="right"]
+	expr_404 -> expr_408 [label="next"]
+	expr_408 -> assign_409 [label="expr"]
+	assign_409 -> storage_var_410 [label="left"]
+	assign_409 -> alloc_array_411 [label="right"]
+	alloc_array_411 -> number_literal_412 [label="length"]
+	expr_408 -> expr_413 [label="next"]
+	expr_413 -> assign_414 [label="expr"]
+	assign_414 -> storage_var_415 [label="left"]
+	assign_414 -> alloc_array_416 [label="right"]
+	alloc_array_416 -> number_literal_417 [label="length"]
+	expr_413 -> expr_418 [label="next"]
+	expr_418 -> assign_419 [label="expr"]
+	assign_419 -> subscript_420 [label="left"]
+	subscript_420 -> storage_var_421 [label="array"]
+	subscript_420 -> call_internal_function_422 [label="index"]
+	call_internal_function_422 -> internal_function_423 [label="function"]
+	assign_419 -> bool_literal_424 [label="right"]
+	expr_418 -> expr_425 [label="next"]
+	expr_425 -> assign_426 [label="expr"]
+	assign_426 -> subscript_427 [label="left"]
+	subscript_427 -> storage_var_428 [label="array"]
+	subscript_427 -> cast_429 [label="index"]
+	cast_429 -> builtins_430 [label="expr"]
+	assign_426 -> bool_literal_431 [label="right"]
+	expr_425 -> emit_432 [label="next"]
+	emit_432 -> number_literal_433 [label="arg #0"]
+	emit_432 -> cast_434 [label="arg #1"]
+	cast_434 -> call_internal_function_435 [label="expr"]
+	call_internal_function_435 -> internal_function_436 [label="function"]
+	emit_432 -> storage_load_437 [label="arg #2"]
+	storage_load_437 -> storage_var_438 [label="expr"]
+	contract_352 -> name [label="function"]
+	name -> returns_440 [label="returns"]
+	name -> return_441 [label="body"]
+	return_441 -> storage_load_442 [label="expr"]
+	storage_load_442 -> storage_var_443 [label="expr"]
+	contract_352 -> symbol [label="function"]
+	symbol -> returns_445 [label="returns"]
+	symbol -> return_446 [label="body"]
+	return_446 -> storage_load_447 [label="expr"]
+	storage_load_447 -> storage_var_448 [label="expr"]
+	contract_352 -> decimals [label="function"]
+	decimals -> returns_450 [label="returns"]
+	decimals -> return_451 [label="body"]
+	return_451 -> storage_load_452 [label="expr"]
+	storage_load_452 -> storage_var_453 [label="expr"]
+	contract_352 -> balanceOf_454 [label="function"]
+	balanceOf_454 -> parameters_455 [label="parameters"]
+	balanceOf_454 -> returns_456 [label="returns"]
+	balanceOf_454 -> return_457 [label="body"]
+	return_457 -> storage_load_458 [label="expr"]
+	storage_load_458 -> subscript_459 [label="expr"]
+	subscript_459 -> storage_var_460 [label="array"]
+	subscript_459 -> variable_461 [label="index"]
+	contract_352 -> totalSupply_462 [label="function"]
+	totalSupply_462 -> returns_463 [label="returns"]
+	totalSupply_462 -> return_464 [label="body"]
+	return_464 -> storage_load_465 [label="expr"]
+	storage_load_465 -> storage_var_466 [label="expr"]
+	contract_352 -> transfer_467 [label="function"]
+	transfer_467 -> parameters_468 [label="parameters"]
+	transfer_467 -> returns_469 [label="returns"]
+	transfer_467 -> if_470 [label="body"]
+	if_470 -> logical_or [label="cond"]
+	logical_or -> storage_load_472 [label="left"]
+	storage_load_472 -> subscript_473 [label="expr"]
+	subscript_473 -> storage_var_474 [label="array"]
+	subscript_473 -> cast_475 [label="index"]
+	cast_475 -> call_internal_function_476 [label="expr"]
+	call_internal_function_476 -> internal_function_477 [label="function"]
+	logical_or -> storage_load_478 [label="right"]
+	storage_load_478 -> subscript_479 [label="expr"]
+	subscript_479 -> storage_var_480 [label="array"]
+	subscript_479 -> variable_481 [label="index"]
+	if_470 -> expr_482 [label="then"]
+	expr_482 -> call_internal_function_483 [label="expr"]
+	call_internal_function_483 -> internal_function_484 [label="function"]
+	call_internal_function_483 -> cast_485 [label="arg #0"]
+	cast_485 -> call_internal_function_486 [label="expr"]
+	call_internal_function_486 -> internal_function_487 [label="function"]
+	call_internal_function_483 -> variable_488 [label="arg #1"]
+	call_internal_function_483 -> variable_489 [label="arg #2"]
+	expr_482 -> return_490 [label="next"]
+	return_490 -> bool_literal_491 [label="expr"]
+	if_470 -> var_decl_492 [label="next"]
+	var_decl_492 -> call_internal_function_493 [label="init"]
+	call_internal_function_493 -> internal_function_494 [label="function"]
+	call_internal_function_493 -> call_internal_function_495 [label="arg #0"]
+	call_internal_function_495 -> internal_function_496 [label="function"]
+	call_internal_function_495 -> variable_497 [label="arg #0"]
+	call_internal_function_495 -> storage_load_498 [label="arg #1"]
+	storage_load_498 -> storage_var_499 [label="expr"]
+	call_internal_function_493 -> number_literal_500 [label="arg #1"]
+	var_decl_492 -> var_decl_501 [label="next"]
+	var_decl_501 -> call_internal_function_502 [label="init"]
+	call_internal_function_502 -> internal_function_503 [label="function"]
+	call_internal_function_502 -> call_internal_function_504 [label="arg #0"]
+	call_internal_function_504 -> internal_function_505 [label="function"]
+	call_internal_function_504 -> variable_506 [label="arg #0"]
+	call_internal_function_504 -> storage_load_507 [label="arg #1"]
+	storage_load_507 -> storage_var_508 [label="expr"]
+	call_internal_function_502 -> number_literal_509 [label="arg #1"]
+	var_decl_501 -> expr_510 [label="next"]
+	expr_510 -> call_internal_function_511 [label="expr"]
+	call_internal_function_511 -> internal_function_512 [label="function"]
+	call_internal_function_511 -> cast_513 [label="arg #0"]
+	cast_513 -> call_internal_function_514 [label="expr"]
+	call_internal_function_514 -> internal_function_515 [label="function"]
+	call_internal_function_511 -> storage_load_516 [label="arg #1"]
+	storage_load_516 -> storage_var_517 [label="expr"]
+	call_internal_function_511 -> variable_518 [label="arg #2"]
+	expr_510 -> expr_519 [label="next"]
+	expr_519 -> call_internal_function_520 [label="expr"]
+	call_internal_function_520 -> internal_function_521 [label="function"]
+	call_internal_function_520 -> cast_522 [label="arg #0"]
+	cast_522 -> call_internal_function_523 [label="expr"]
+	call_internal_function_523 -> internal_function_524 [label="function"]
+	call_internal_function_520 -> storage_load_525 [label="arg #1"]
+	storage_load_525 -> storage_var_526 [label="expr"]
+	call_internal_function_520 -> variable_527 [label="arg #2"]
+	expr_519 -> expr_528 [label="next"]
+	expr_528 -> call_internal_function_529 [label="expr"]
+	call_internal_function_529 -> internal_function_530 [label="function"]
+	call_internal_function_529 -> cast_531 [label="arg #0"]
+	cast_531 -> call_internal_function_532 [label="expr"]
+	call_internal_function_532 -> internal_function_533 [label="function"]
+	call_internal_function_529 -> variable_534 [label="arg #1"]
+	call_internal_function_529 -> call_internal_function_535 [label="arg #2"]
+	call_internal_function_535 -> internal_function_536 [label="function"]
+	call_internal_function_535 -> call_internal_function_537 [label="arg #0"]
+	call_internal_function_537 -> internal_function_538 [label="function"]
+	call_internal_function_537 -> variable_539 [label="arg #0"]
+	call_internal_function_537 -> variable_540 [label="arg #1"]
+	call_internal_function_535 -> variable_541 [label="arg #1"]
+	expr_528 -> return_542 [label="next"]
+	return_542 -> bool_literal_543 [label="expr"]
+	contract_352 -> allowance_544 [label="function"]
+	allowance_544 -> parameters_545 [label="parameters"]
+	allowance_544 -> returns_546 [label="returns"]
+	allowance_544 -> return_547 [label="body"]
+	return_547 -> storage_load_548 [label="expr"]
+	storage_load_548 -> subscript_549 [label="expr"]
+	subscript_549 -> subscript_550 [label="array"]
+	subscript_550 -> storage_var_551 [label="array"]
+	subscript_550 -> variable_552 [label="index"]
+	subscript_549 -> variable_553 [label="index"]
+	contract_352 -> approve_554 [label="function"]
+	approve_554 -> parameters_555 [label="parameters"]
+	approve_554 -> returns_556 [label="returns"]
+	approve_554 -> expr_557 [label="body"]
+	expr_557 -> call_internal_function_558 [label="expr"]
+	call_internal_function_558 -> internal_function_559 [label="function"]
+	call_internal_function_558 -> cast_560 [label="arg #0"]
+	cast_560 -> call_internal_function_561 [label="expr"]
+	call_internal_function_561 -> internal_function_562 [label="function"]
+	call_internal_function_558 -> variable_563 [label="arg #1"]
+	call_internal_function_558 -> variable_564 [label="arg #2"]
+	expr_557 -> return_565 [label="next"]
+	return_565 -> bool_literal_566 [label="expr"]
+	contract_352 -> transferFrom_567 [label="function"]
+	transferFrom_567 -> parameters_568 [label="parameters"]
+	transferFrom_567 -> returns_569 [label="returns"]
+	transferFrom_567 -> expr_570 [label="body"]
+	expr_570 -> assign_571 [label="expr"]
+	assign_571 -> storage_var_572 [label="left"]
+	assign_571 -> number_literal_573 [label="right"]
+	expr_570 -> if_574 [label="next"]
+	if_574 -> logical_or_575 [label="cond"]
+	logical_or_575 -> storage_load_576 [label="left"]
+	storage_load_576 -> subscript_577 [label="expr"]
+	subscript_577 -> storage_var_578 [label="array"]
+	subscript_577 -> cast_579 [label="index"]
+	cast_579 -> call_internal_function_580 [label="expr"]
+	call_internal_function_580 -> internal_function_581 [label="function"]
+	logical_or_575 -> storage_load_582 [label="right"]
+	storage_load_582 -> subscript_583 [label="expr"]
+	subscript_583 -> storage_var_584 [label="array"]
+	subscript_583 -> variable_585 [label="index"]
+	if_574 -> expr_586 [label="then"]
+	expr_586 -> call_internal_function_587 [label="expr"]
+	call_internal_function_587 -> internal_function_588 [label="function"]
+	call_internal_function_587 -> variable_589 [label="arg #0"]
+	call_internal_function_587 -> variable_590 [label="arg #1"]
+	call_internal_function_587 -> variable_591 [label="arg #2"]
+	expr_586 -> return_592 [label="next"]
+	return_592 -> bool_literal_593 [label="expr"]
+	if_574 -> var_decl_594 [label="next"]
+	var_decl_594 -> call_internal_function_595 [label="init"]
+	call_internal_function_595 -> internal_function_596 [label="function"]
+	call_internal_function_595 -> call_internal_function_597 [label="arg #0"]
+	call_internal_function_597 -> internal_function_598 [label="function"]
+	call_internal_function_597 -> variable_599 [label="arg #0"]
+	call_internal_function_597 -> storage_load_600 [label="arg #1"]
+	storage_load_600 -> storage_var_601 [label="expr"]
+	call_internal_function_595 -> number_literal_602 [label="arg #1"]
+	var_decl_594 -> var_decl_603 [label="next"]
+	var_decl_603 -> call_internal_function_604 [label="init"]
+	call_internal_function_604 -> internal_function_605 [label="function"]
+	call_internal_function_604 -> call_internal_function_606 [label="arg #0"]
+	call_internal_function_606 -> internal_function_607 [label="function"]
+	call_internal_function_606 -> variable_608 [label="arg #0"]
+	call_internal_function_606 -> storage_load_609 [label="arg #1"]
+	storage_load_609 -> storage_var_610 [label="expr"]
+	call_internal_function_604 -> number_literal_611 [label="arg #1"]
+	var_decl_603 -> expr_612 [label="next"]
+	expr_612 -> call_internal_function_613 [label="expr"]
+	call_internal_function_613 -> internal_function_614 [label="function"]
+	call_internal_function_613 -> variable_615 [label="arg #0"]
+	call_internal_function_613 -> storage_load_616 [label="arg #1"]
+	storage_load_616 -> storage_var_617 [label="expr"]
+	call_internal_function_613 -> variable_618 [label="arg #2"]
+	expr_612 -> expr_619 [label="next"]
+	expr_619 -> call_internal_function_620 [label="expr"]
+	call_internal_function_620 -> internal_function_621 [label="function"]
+	call_internal_function_620 -> variable_622 [label="arg #0"]
+	call_internal_function_620 -> storage_load_623 [label="arg #1"]
+	storage_load_623 -> storage_var_624 [label="expr"]
+	call_internal_function_620 -> variable_625 [label="arg #2"]
+	expr_619 -> expr_626 [label="next"]
+	expr_626 -> call_internal_function_627 [label="expr"]
+	call_internal_function_627 -> internal_function_628 [label="function"]
+	call_internal_function_627 -> variable_629 [label="arg #0"]
+	call_internal_function_627 -> variable_630 [label="arg #1"]
+	call_internal_function_627 -> call_internal_function_631 [label="arg #2"]
+	call_internal_function_631 -> internal_function_632 [label="function"]
+	call_internal_function_631 -> call_internal_function_633 [label="arg #0"]
+	call_internal_function_633 -> internal_function_634 [label="function"]
+	call_internal_function_633 -> variable_635 [label="arg #0"]
+	call_internal_function_633 -> variable_636 [label="arg #1"]
+	call_internal_function_631 -> variable_637 [label="arg #1"]
+	expr_626 -> expr_638 [label="next"]
+	expr_638 -> call_internal_function_639 [label="expr"]
+	call_internal_function_639 -> internal_function_640 [label="function"]
+	call_internal_function_639 -> variable_641 [label="arg #0"]
+	call_internal_function_639 -> cast_642 [label="arg #1"]
+	cast_642 -> call_internal_function_643 [label="expr"]
+	call_internal_function_643 -> internal_function_644 [label="function"]
+	call_internal_function_639 -> call_internal_function_645 [label="arg #2"]
+	call_internal_function_645 -> internal_function_646 [label="function"]
+	call_internal_function_645 -> storage_load_647 [label="arg #0"]
+	storage_load_647 -> subscript_648 [label="expr"]
+	subscript_648 -> subscript_649 [label="array"]
+	subscript_649 -> storage_var_650 [label="array"]
+	subscript_649 -> variable_651 [label="index"]
+	subscript_648 -> cast_652 [label="index"]
+	cast_652 -> call_internal_function_653 [label="expr"]
+	call_internal_function_653 -> internal_function_654 [label="function"]
+	call_internal_function_645 -> variable_655 [label="arg #1"]
+	call_internal_function_645 -> alloc_array_656 [label="arg #2"]
+	alloc_array_656 -> number_literal_657 [label="length"]
+	expr_638 -> return_658 [label="next"]
+	return_658 -> bool_literal_659 [label="expr"]
+	contract_352 -> approve_660 [label="function"]
+	approve_660 -> parameters_661 [label="parameters"]
+	approve_660 -> expr_662 [label="body"]
+	expr_662 -> builtins_663 [label="expr"]
+	builtins_663 -> equal_664 [label="arg #0"]
+	equal_664 -> variable_665 [label="left"]
+	equal_664 -> number_literal_666 [label="right"]
+	builtins_663 -> alloc_array_667 [label="arg #1"]
+	alloc_array_667 -> number_literal_668 [label="length"]
+	expr_662 -> expr_669 [label="next"]
+	expr_669 -> assign_670 [label="expr"]
+	assign_670 -> subscript_671 [label="left"]
+	subscript_671 -> storage_var_672 [label="array"]
+	subscript_671 -> variable_673 [label="index"]
+	assign_670 -> call_internal_function_674 [label="right"]
+	call_internal_function_674 -> internal_function_675 [label="function"]
+	call_internal_function_674 -> storage_load_676 [label="arg #0"]
+	storage_load_676 -> subscript_677 [label="expr"]
+	subscript_677 -> storage_var_678 [label="array"]
+	subscript_677 -> variable_679 [label="index"]
+	call_internal_function_674 -> variable_680 [label="arg #1"]
+	contract_352 -> _approve [label="function"]
+	_approve -> parameters_682 [label="parameters"]
+	_approve -> delete [label="body"]
+	delete -> subscript_684 [label="expr"]
+	subscript_684 -> storage_var_685 [label="array"]
+	subscript_684 -> variable_686 [label="index"]
+	contract_352 -> approve_687 [label="function"]
+	approve_687 -> parameters_688 [label="parameters"]
+	approve_687 -> expr_689 [label="body"]
+	expr_689 -> assign_690 [label="expr"]
+	assign_690 -> subscript_691 [label="left"]
+	subscript_691 -> storage_var_692 [label="array"]
+	subscript_691 -> variable_693 [label="index"]
+	assign_690 -> bool_literal_694 [label="right"]
+	contract_352 -> _transfer [label="function"]
+	_transfer -> parameters_696 [label="parameters"]
+	_transfer -> expr_697 [label="body"]
+	expr_697 -> builtins_698 [label="expr"]
+	builtins_698 -> not_699 [label="arg #0"]
+	not_699 -> equal_700 [label="expr"]
+	equal_700 -> variable_701 [label="left"]
+	equal_700 -> number_literal_702 [label="right"]
+	builtins_698 -> alloc_array_703 [label="arg #1"]
+	alloc_array_703 -> number_literal_704 [label="length"]
+	expr_697 -> expr_705 [label="next"]
+	expr_705 -> builtins_706 [label="expr"]
+	builtins_706 -> not_707 [label="arg #0"]
+	not_707 -> equal_708 [label="expr"]
+	equal_708 -> variable_709 [label="left"]
+	equal_708 -> number_literal_710 [label="right"]
+	builtins_706 -> alloc_array_711 [label="arg #1"]
+	alloc_array_711 -> number_literal_712 [label="length"]
+	expr_705 -> expr_713 [label="next"]
+	expr_713 -> builtins_714 [label="expr"]
+	builtins_714 -> more_715 [label="arg #0"]
+	more_715 -> variable_716 [label="left"]
+	more_715 -> number_literal_717 [label="right"]
+	builtins_714 -> alloc_array_718 [label="arg #1"]
+	alloc_array_718 -> number_literal_719 [label="length"]
+	expr_713 -> if_720 [label="next"]
+	if_720 -> storage_load_721 [label="cond"]
+	storage_load_721 -> storage_var_722 [label="expr"]
+	if_720 -> expr_723 [label="then"]
+	expr_723 -> builtins_724 [label="expr"]
+	builtins_724 -> equal_725 [label="arg #0"]
+	equal_725 -> storage_load_726 [label="left"]
+	storage_load_726 -> subscript_727 [label="expr"]
+	subscript_727 -> storage_var_728 [label="array"]
+	subscript_727 -> variable_729 [label="index"]
+	equal_725 -> bool_literal_730 [label="right"]
+	builtins_724 -> alloc_array_731 [label="arg #1"]
+	alloc_array_731 -> number_literal_732 [label="length"]
+	if_720 -> expr_733 [label="next"]
+	expr_733 -> call_internal_function_734 [label="expr"]
+	call_internal_function_734 -> internal_function_735 [label="function"]
+	call_internal_function_734 -> variable_736 [label="arg #0"]
+	call_internal_function_734 -> variable_737 [label="arg #1"]
+	call_internal_function_734 -> variable_738 [label="arg #2"]
+	contract_352 -> _transfers [label="function"]
+	_transfers -> parameters_740 [label="parameters"]
+	_transfers -> expr_741 [label="body"]
+	expr_741 -> builtins_742 [label="expr"]
+	builtins_742 -> not_743 [label="arg #0"]
+	not_743 -> equal_744 [label="expr"]
+	equal_744 -> variable_745 [label="left"]
+	equal_744 -> number_literal_746 [label="right"]
+	builtins_742 -> alloc_array_747 [label="arg #1"]
+	alloc_array_747 -> number_literal_748 [label="length"]
+	expr_741 -> expr_749 [label="next"]
+	expr_749 -> builtins_750 [label="expr"]
+	builtins_750 -> not_751 [label="arg #0"]
+	not_751 -> equal_752 [label="expr"]
+	equal_752 -> variable_753 [label="left"]
+	equal_752 -> number_literal_754 [label="right"]
+	builtins_750 -> alloc_array_755 [label="arg #1"]
+	alloc_array_755 -> number_literal_756 [label="length"]
+	expr_749 -> expr_757 [label="next"]
+	expr_757 -> assign_758 [label="expr"]
+	assign_758 -> subscript_759 [label="left"]
+	subscript_759 -> storage_var_760 [label="array"]
+	subscript_759 -> variable_761 [label="index"]
+	assign_758 -> call_internal_function_762 [label="right"]
+	call_internal_function_762 -> internal_function_763 [label="function"]
+	call_internal_function_762 -> storage_load_764 [label="arg #0"]
+	storage_load_764 -> subscript_765 [label="expr"]
+	subscript_765 -> storage_var_766 [label="array"]
+	subscript_765 -> variable_767 [label="index"]
+	call_internal_function_762 -> variable_768 [label="arg #1"]
+	expr_757 -> expr_769 [label="next"]
+	expr_769 -> assign_770 [label="expr"]
+	assign_770 -> subscript_771 [label="left"]
+	subscript_771 -> storage_var_772 [label="array"]
+	subscript_771 -> variable_773 [label="index"]
+	assign_770 -> call_internal_function_774 [label="right"]
+	call_internal_function_774 -> internal_function_775 [label="function"]
+	call_internal_function_774 -> storage_load_776 [label="arg #0"]
+	storage_load_776 -> subscript_777 [label="expr"]
+	subscript_777 -> storage_var_778 [label="array"]
+	subscript_777 -> variable_779 [label="index"]
+	call_internal_function_774 -> variable_780 [label="arg #1"]
+	expr_769 -> emit_781 [label="next"]
+	emit_781 -> variable_782 [label="arg #0"]
+	emit_781 -> variable_783 [label="arg #1"]
+	emit_781 -> variable_784 [label="arg #2"]
+	contract_352 -> _approve_785 [label="function"]
+	_approve_785 -> parameters_786 [label="parameters"]
+	_approve_785 -> expr_787 [label="body"]
+	expr_787 -> builtins_788 [label="expr"]
+	builtins_788 -> not_789 [label="arg #0"]
+	not_789 -> equal_790 [label="expr"]
+	equal_790 -> variable_791 [label="left"]
+	equal_790 -> number_literal_792 [label="right"]
+	builtins_788 -> alloc_array_793 [label="arg #1"]
+	alloc_array_793 -> number_literal_794 [label="length"]
+	expr_787 -> expr_795 [label="next"]
+	expr_795 -> builtins_796 [label="expr"]
+	builtins_796 -> not_797 [label="arg #0"]
+	not_797 -> equal_798 [label="expr"]
+	equal_798 -> variable_799 [label="left"]
+	equal_798 -> number_literal_800 [label="right"]
+	builtins_796 -> alloc_array_801 [label="arg #1"]
+	alloc_array_801 -> number_literal_802 [label="length"]
+	expr_795 -> expr_803 [label="next"]
+	expr_803 -> assign_804 [label="expr"]
+	assign_804 -> subscript_805 [label="left"]
+	subscript_805 -> subscript_806 [label="array"]
+	subscript_806 -> storage_var_807 [label="array"]
+	subscript_806 -> variable_808 [label="index"]
+	subscript_805 -> variable_809 [label="index"]
+	assign_804 -> variable_810 [label="right"]
+	expr_803 -> emit_811 [label="next"]
+	emit_811 -> variable_812 [label="arg #0"]
+	emit_811 -> variable_813 [label="arg #1"]
+	emit_811 -> variable_814 [label="arg #2"]
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_817 [label="Debug"]
+	diagnostics -> diagnostic_818 [label="Debug"]
+	diagnostics -> diagnostic_819 [label="Debug"]
+	diagnostics -> diagnostic_820 [label="Debug"]
+	diagnostics -> diagnostic_821 [label="Warning"]
+	diagnostics -> diagnostic_822 [label="Warning"]
+	diagnostics -> diagnostic_823 [label="Warning"]
+	diagnostics -> diagnostic_824 [label="Warning"]
+	diagnostics -> diagnostic_825 [label="Warning"]
+	diagnostics -> diagnostic_826 [label="Warning"]
+	diagnostics -> diagnostic_827 [label="Debug"]
+	diagnostics -> diagnostic_828 [label="Warning"]
+	diagnostics -> diagnostic_829 [label="Debug"]
+	diagnostics -> diagnostic_830 [label="Warning"]
+	diagnostics -> diagnostic_831 [label="Warning"]
+	diagnostics -> diagnostic_832 [label="Warning"]
+	diagnostics -> diagnostic_833 [label="Warning"]
+	diagnostics -> diagnostic_834 [label="Warning"]
+	diagnostics -> diagnostic_835 [label="Warning"]
+}

+ 0 - 0
tests/contract_testcases/ewasm/comment_tests.sol → tests/contract_testcases/evm/comment_tests.sol


+ 13 - 13
tests/contract_testcases/ewasm/dead_storage_different_types.dot → tests/contract_testcases/evm/dead_storage_different_types.dot

@@ -1,17 +1,17 @@
-strict digraph "tests/contract_testcases/ewasm/dead_storage_different_types.sol" {
-	contract [label="contract C\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:1:1-10:2"]
-	var [label="variable referralsKey\nvisibility private\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:2:5-35"]
-	getReferralsByAddress [label="function getReferralsByAddress\ncontract: C\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:4:5-98\nsignature getReferralsByAddress()\nvisibility public\nmutability view"]
+strict digraph "tests/contract_testcases/evm/dead_storage_different_types.sol" {
+	contract [label="contract C\ntests/contract_testcases/evm/dead_storage_different_types.sol:1:1-10:2"]
+	var [label="variable referralsKey\nvisibility private\ntests/contract_testcases/evm/dead_storage_different_types.sol:2:5-35"]
+	getReferralsByAddress [label="function getReferralsByAddress\ncontract: C\ntests/contract_testcases/evm/dead_storage_different_types.sol:4:5-98\nsignature getReferralsByAddress()\nvisibility public\nmutability view"]
 	returns [label="returns\naddress[] referralsKeyList\nuint256 "]
-	var_decl [label="variable decl uint256 length\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:5:9-42"]
-	array_length [label="array length uint256\nelement address\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:5:36-42"]
-	storage_var [label="storage variable\nC.referralsKey\naddress[] storage\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:5:23-35"]
-	return [label="return\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:8:9-37"]
-	list [label="list\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:8:9-37"]
-	storage_load [label="storage load address[]\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:8:9-37"]
-	storage_var_11 [label="storage variable\nC.referralsKey\naddress[] storage\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:8:17-29"]
-	variable [label="variable: length\nuint256\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:8:30-36"]
-	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/ewasm/dead_storage_different_types.sol:1:1-10:2"]
+	var_decl [label="variable decl uint256 length\ntests/contract_testcases/evm/dead_storage_different_types.sol:5:9-42"]
+	array_length [label="array length uint256\nelement address\ntests/contract_testcases/evm/dead_storage_different_types.sol:5:36-42"]
+	storage_var [label="storage variable\nC.referralsKey\naddress[] storage\ntests/contract_testcases/evm/dead_storage_different_types.sol:5:23-35"]
+	return [label="return\ntests/contract_testcases/evm/dead_storage_different_types.sol:8:9-37"]
+	list [label="list\ntests/contract_testcases/evm/dead_storage_different_types.sol:8:9-37"]
+	storage_load [label="storage load address[]\ntests/contract_testcases/evm/dead_storage_different_types.sol:8:9-37"]
+	storage_var_11 [label="storage variable\nC.referralsKey\naddress[] storage\ntests/contract_testcases/evm/dead_storage_different_types.sol:8:17-29"]
+	variable [label="variable: length\nuint256\ntests/contract_testcases/evm/dead_storage_different_types.sol:8:30-36"]
+	diagnostic [label="found contract 'C'\nlevel Debug\ntests/contract_testcases/evm/dead_storage_different_types.sol:1:1-10:2"]
 	contracts -> contract
 	contract -> var [label="variable"]
 	contract -> getReferralsByAddress [label="function"]

+ 0 - 0
tests/contract_testcases/ewasm/dead_storage_different_types.sol → tests/contract_testcases/evm/dead_storage_different_types.sol


+ 65 - 65
tests/contract_testcases/ewasm/interface_inheritance.dot → tests/contract_testcases/evm/interface_inheritance.dot

@@ -1,86 +1,86 @@
-strict digraph "tests/contract_testcases/ewasm/interface_inheritance.sol" {
-	contract [label="contract IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:2:1-7:2"]
-	factory [label="function factory\ncontract: IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:4:5-55\nsignature factory()\nvisibility external\nmutability pure\nvirtual"]
+strict digraph "tests/contract_testcases/evm/interface_inheritance.sol" {
+	contract [label="contract IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:2:1-7:2"]
+	factory [label="function factory\ncontract: IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:4:5-55\nsignature factory()\nvisibility external\nmutability pure\nvirtual"]
 	returns [label="returns\naddress "]
-	WETH [label="function WETH\ncontract: IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:5:5-52\nsignature WETH()\nvisibility external\nmutability pure\nvirtual"]
+	WETH [label="function WETH\ncontract: IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:5:5-52\nsignature WETH()\nvisibility external\nmutability pure\nvirtual"]
 	returns_5 [label="returns\naddress "]
-	createSomething [label="function createSomething\ncontract: IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:6:5-88\nsignature createSomething(address,address)\nvisibility external\nmutability nonpayable\nvirtual"]
+	createSomething [label="function createSomething\ncontract: IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:6:5-88\nsignature createSomething(address,address)\nvisibility external\nmutability nonpayable\nvirtual"]
 	parameters [label="parameters\naddress tokenA\naddress tokenB"]
 	returns_8 [label="returns\naddress "]
-	contract_9 [label="contract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:8:1-18:2"]
-	base [label="base IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:9:33-51"]
-	removeLiquidityETHSupportingFeeOnTransferTokens [label="function removeLiquidityETHSupportingFeeOnTransferTokens\ncontract: IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:10:5-17:40\nsignature removeLiquidityETHSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
+	contract_9 [label="contract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:8:1-18:2"]
+	base [label="base IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:9:33-51"]
+	removeLiquidityETHSupportingFeeOnTransferTokens [label="function removeLiquidityETHSupportingFeeOnTransferTokens\ncontract: IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:10:5-17:40\nsignature removeLiquidityETHSupportingFeeOnTransferTokens(address,uint256,uint256,uint256,address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
 	parameters_12 [label="parameters\naddress token\nuint256 liquidity\nuint256 amountTokenMin\nuint256 amountETHMin\naddress to\nuint256 deadline"]
 	returns_13 [label="returns\nuint256 amountETH"]
-	contract_14 [label="contract IUniswapV2Factory\ntests/contract_testcases/ewasm/interface_inheritance.sol:19:1-22:2"]
-	createPair [label="function createPair\ncontract: IUniswapV2Factory\ntests/contract_testcases/ewasm/interface_inheritance.sol:21:5-83\nsignature createPair(address,address)\nvisibility external\nmutability nonpayable\nvirtual"]
+	contract_14 [label="contract IUniswapV2Factory\ntests/contract_testcases/evm/interface_inheritance.sol:19:1-22:2"]
+	createPair [label="function createPair\ncontract: IUniswapV2Factory\ntests/contract_testcases/evm/interface_inheritance.sol:21:5-83\nsignature createPair(address,address)\nvisibility external\nmutability nonpayable\nvirtual"]
 	parameters_16 [label="parameters\naddress tokenA\naddress tokenB"]
 	returns_17 [label="returns\naddress "]
-	contract_18 [label="contract BABYLINK\ntests/contract_testcases/ewasm/interface_inheritance.sol:23:1-49:2"]
-	var [label="variable uniswapV2Router\nvisibility public\ntests/contract_testcases/ewasm/interface_inheritance.sol:26:5-46"]
-	var_20 [label="variable uniswapV2Pair\nvisibility public\ntests/contract_testcases/ewasm/interface_inheritance.sol:27:5-33"]
-	uniswapV2Router [label="function uniswapV2Router\ncontract: BABYLINK\ntests/contract_testcases/ewasm/interface_inheritance.sol:26:31-46\nsignature uniswapV2Router()\nvisibility public\nmutability view"]
+	contract_18 [label="contract BABYLINK\ntests/contract_testcases/evm/interface_inheritance.sol:23:1-49:2"]
+	var [label="variable uniswapV2Router\nvisibility public\ntests/contract_testcases/evm/interface_inheritance.sol:26:5-46"]
+	var_20 [label="variable uniswapV2Pair\nvisibility public\ntests/contract_testcases/evm/interface_inheritance.sol:27:5-33"]
+	uniswapV2Router [label="function uniswapV2Router\ncontract: BABYLINK\ntests/contract_testcases/evm/interface_inheritance.sol:26:31-46\nsignature uniswapV2Router()\nvisibility public\nmutability view"]
 	returns_22 [label="returns\ncontract IUniswapV2Router02 "]
 	return [label="return\nimplicit"]
 	storage_load [label="storage load contract IUniswapV2Router02\nimplicit"]
 	storage_var [label="storage variable\nBABYLINK.uniswapV2Router\ncontract IUniswapV2Router02 storage\nimplicit"]
-	uniswapV2Pair [label="function uniswapV2Pair\ncontract: BABYLINK\ntests/contract_testcases/ewasm/interface_inheritance.sol:27:20-33\nsignature uniswapV2Pair()\nvisibility public\nmutability view"]
+	uniswapV2Pair [label="function uniswapV2Pair\ncontract: BABYLINK\ntests/contract_testcases/evm/interface_inheritance.sol:27:20-33\nsignature uniswapV2Pair()\nvisibility public\nmutability view"]
 	returns_27 [label="returns\naddress "]
 	return_28 [label="return\nimplicit"]
 	storage_load_29 [label="storage load address\nimplicit"]
 	storage_var_30 [label="storage variable\nBABYLINK.uniswapV2Pair\naddress storage\nimplicit"]
-	node_31 [label="constructor \ncontract: BABYLINK\ntests/contract_testcases/ewasm/interface_inheritance.sol:29:5-20\nsignature ()\nvisibility public\nmutability nonpayable"]
-	var_decl [label="variable decl contract IUniswapV2Router02 _uniswapV2Router\ntests/contract_testcases/ewasm/interface_inheritance.sol:31:9-109"]
-	cast [label="cast contract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:31:47-109"]
-	number_literal [label="address literal: 96635033217071433185869069577301221175488545358\ntests/contract_testcases/ewasm/interface_inheritance.sol:31:66-108"]
-	expr [label="expression\ntests/contract_testcases/ewasm/interface_inheritance.sol:33:9-43"]
-	assign [label="assign\ncontract IUniswapV2Router02 storage\ntests/contract_testcases/ewasm/interface_inheritance.sol:33:9-24"]
-	storage_var_37 [label="storage variable\nBABYLINK.uniswapV2Router\ncontract IUniswapV2Router02 storage\ntests/contract_testcases/ewasm/interface_inheritance.sol:33:9-24"]
-	variable [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:33:27-43"]
-	changeRouterVersion [label="function changeRouterVersion\ncontract: BABYLINK\ntests/contract_testcases/ewasm/interface_inheritance.sol:37:5-98\nsignature changeRouterVersion(address)\nvisibility public\nmutability nonpayable"]
+	node_31 [label="constructor \ncontract: BABYLINK\ntests/contract_testcases/evm/interface_inheritance.sol:29:5-20\nsignature ()\nvisibility public\nmutability nonpayable"]
+	var_decl [label="variable decl contract IUniswapV2Router02 _uniswapV2Router\ntests/contract_testcases/evm/interface_inheritance.sol:31:9-109"]
+	cast [label="cast contract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:31:47-109"]
+	number_literal [label="address literal: 96635033217071433185869069577301221175488545358\ntests/contract_testcases/evm/interface_inheritance.sol:31:66-108"]
+	expr [label="expression\ntests/contract_testcases/evm/interface_inheritance.sol:33:9-43"]
+	assign [label="assign\ncontract IUniswapV2Router02 storage\ntests/contract_testcases/evm/interface_inheritance.sol:33:9-24"]
+	storage_var_37 [label="storage variable\nBABYLINK.uniswapV2Router\ncontract IUniswapV2Router02 storage\ntests/contract_testcases/evm/interface_inheritance.sol:33:9-24"]
+	variable [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:33:27-43"]
+	changeRouterVersion [label="function changeRouterVersion\ncontract: BABYLINK\ntests/contract_testcases/evm/interface_inheritance.sol:37:5-98\nsignature changeRouterVersion(address)\nvisibility public\nmutability nonpayable"]
 	parameters_40 [label="parameters\naddress newRouterAddress"]
 	returns_41 [label="returns\naddress newPairAddress"]
-	var_decl_42 [label="variable decl contract IUniswapV2Router02 _uniswapV2Router\ntests/contract_testcases/ewasm/interface_inheritance.sol:39:9-83"]
-	cast_43 [label="cast contract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:39:47-83"]
-	variable_44 [label="variable: newRouterAddress\naddress\ntests/contract_testcases/ewasm/interface_inheritance.sol:39:66-82"]
-	if [label="if\ntests/contract_testcases/ewasm/interface_inheritance.sol:42:9-47:10"]
-	equal [label="equal\ntests/contract_testcases/ewasm/interface_inheritance.sol:42:12-40"]
-	variable_47 [label="variable: newPairAddress\naddress\ntests/contract_testcases/ewasm/interface_inheritance.sol:42:12-26"]
-	number_literal_48 [label="address literal: 0\ntests/contract_testcases/ewasm/interface_inheritance.sol:42:30-40"]
-	expr_49 [label="expression\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:13-45:68"]
-	assign_50 [label="assign\naddress\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:13-45:68"]
-	variable_51 [label="variable: newPairAddress\naddress\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:13-27"]
-	call_external_function [label="call external function\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:30-45:68"]
-	external_function [label="function(address,address) external returns (address)\nIUniswapV2Factory.createPair\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:30-45:68"]
-	cast_54 [label="cast contract IUniswapV2Factory\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:30-75"]
-	call_external_function_55 [label="call external function\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:48-74"]
-	external_function_56 [label="function() external pure returns (address)\nIUniswapV2Router01.factory\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:48-74"]
-	cast_57 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:48-64"]
-	variable_58 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:44:48-64"]
-	cast_59 [label="cast address\ntests/contract_testcases/ewasm/interface_inheritance.sol:45:29-42"]
-	builtins [label="builtin GetAddress\ntests/contract_testcases/ewasm/interface_inheritance.sol:45:37-41"]
-	call_external_function_61 [label="call external function\ntests/contract_testcases/ewasm/interface_inheritance.sol:45:44-67"]
-	external_function_62 [label="function() external pure returns (address)\nIUniswapV2Router01.WETH\ntests/contract_testcases/ewasm/interface_inheritance.sol:45:44-67"]
-	cast_63 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:45:44-60"]
-	variable_64 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:45:44-60"]
-	expr_65 [label="expression\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:13-118"]
-	assign_66 [label="assign\naddress storage\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:13-26"]
-	storage_var_67 [label="storage variable\nBABYLINK.uniswapV2Pair\naddress storage\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:13-26"]
-	call_external_function_68 [label="call external function\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:29-118"]
-	external_function_69 [label="function(address,address) external returns (address)\nIUniswapV2Router01.createSomething\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:29-118"]
-	cast_70 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:29-45"]
-	variable_71 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:29-45"]
-	cast_72 [label="cast address\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:71-84"]
-	builtins_73 [label="builtin GetAddress\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:79-83"]
-	call_external_function_74 [label="call external function\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:93-116"]
-	external_function_75 [label="function() external pure returns (address)\nIUniswapV2Router01.WETH\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:93-116"]
-	cast_76 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:93-109"]
-	variable_77 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/ewasm/interface_inheritance.sol:46:93-109"]
-	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/ewasm/interface_inheritance.sol:1:1-23"]
-	diagnostic_80 [label="found interface 'IUniswapV2Router01'\nlevel Debug\ntests/contract_testcases/ewasm/interface_inheritance.sol:2:1-7:2"]
-	diagnostic_81 [label="found interface 'IUniswapV2Router02'\nlevel Debug\ntests/contract_testcases/ewasm/interface_inheritance.sol:8:1-18:2"]
-	diagnostic_82 [label="found interface 'IUniswapV2Factory'\nlevel Debug\ntests/contract_testcases/ewasm/interface_inheritance.sol:19:1-22:2"]
-	diagnostic_83 [label="found contract 'BABYLINK'\nlevel Debug\ntests/contract_testcases/ewasm/interface_inheritance.sol:23:1-49:2"]
+	var_decl_42 [label="variable decl contract IUniswapV2Router02 _uniswapV2Router\ntests/contract_testcases/evm/interface_inheritance.sol:39:9-83"]
+	cast_43 [label="cast contract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:39:47-83"]
+	variable_44 [label="variable: newRouterAddress\naddress\ntests/contract_testcases/evm/interface_inheritance.sol:39:66-82"]
+	if [label="if\ntests/contract_testcases/evm/interface_inheritance.sol:42:9-47:10"]
+	equal [label="equal\ntests/contract_testcases/evm/interface_inheritance.sol:42:12-40"]
+	variable_47 [label="variable: newPairAddress\naddress\ntests/contract_testcases/evm/interface_inheritance.sol:42:12-26"]
+	number_literal_48 [label="address literal: 0\ntests/contract_testcases/evm/interface_inheritance.sol:42:30-40"]
+	expr_49 [label="expression\ntests/contract_testcases/evm/interface_inheritance.sol:44:13-45:68"]
+	assign_50 [label="assign\naddress\ntests/contract_testcases/evm/interface_inheritance.sol:44:13-45:68"]
+	variable_51 [label="variable: newPairAddress\naddress\ntests/contract_testcases/evm/interface_inheritance.sol:44:13-27"]
+	call_external_function [label="call external function\ntests/contract_testcases/evm/interface_inheritance.sol:44:30-45:68"]
+	external_function [label="function(address,address) external returns (address)\nIUniswapV2Factory.createPair\ntests/contract_testcases/evm/interface_inheritance.sol:44:30-45:68"]
+	cast_54 [label="cast contract IUniswapV2Factory\ntests/contract_testcases/evm/interface_inheritance.sol:44:30-75"]
+	call_external_function_55 [label="call external function\ntests/contract_testcases/evm/interface_inheritance.sol:44:48-74"]
+	external_function_56 [label="function() external pure returns (address)\nIUniswapV2Router01.factory\ntests/contract_testcases/evm/interface_inheritance.sol:44:48-74"]
+	cast_57 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:44:48-64"]
+	variable_58 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:44:48-64"]
+	cast_59 [label="cast address\ntests/contract_testcases/evm/interface_inheritance.sol:45:29-42"]
+	builtins [label="builtin GetAddress\ntests/contract_testcases/evm/interface_inheritance.sol:45:37-41"]
+	call_external_function_61 [label="call external function\ntests/contract_testcases/evm/interface_inheritance.sol:45:44-67"]
+	external_function_62 [label="function() external pure returns (address)\nIUniswapV2Router01.WETH\ntests/contract_testcases/evm/interface_inheritance.sol:45:44-67"]
+	cast_63 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:45:44-60"]
+	variable_64 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:45:44-60"]
+	expr_65 [label="expression\ntests/contract_testcases/evm/interface_inheritance.sol:46:13-118"]
+	assign_66 [label="assign\naddress storage\ntests/contract_testcases/evm/interface_inheritance.sol:46:13-26"]
+	storage_var_67 [label="storage variable\nBABYLINK.uniswapV2Pair\naddress storage\ntests/contract_testcases/evm/interface_inheritance.sol:46:13-26"]
+	call_external_function_68 [label="call external function\ntests/contract_testcases/evm/interface_inheritance.sol:46:29-118"]
+	external_function_69 [label="function(address,address) external returns (address)\nIUniswapV2Router01.createSomething\ntests/contract_testcases/evm/interface_inheritance.sol:46:29-118"]
+	cast_70 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:46:29-45"]
+	variable_71 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:46:29-45"]
+	cast_72 [label="cast address\ntests/contract_testcases/evm/interface_inheritance.sol:46:71-84"]
+	builtins_73 [label="builtin GetAddress\ntests/contract_testcases/evm/interface_inheritance.sol:46:79-83"]
+	call_external_function_74 [label="call external function\ntests/contract_testcases/evm/interface_inheritance.sol:46:93-116"]
+	external_function_75 [label="function() external pure returns (address)\nIUniswapV2Router01.WETH\ntests/contract_testcases/evm/interface_inheritance.sol:46:93-116"]
+	cast_76 [label="cast contract IUniswapV2Router01\ntests/contract_testcases/evm/interface_inheritance.sol:46:93-109"]
+	variable_77 [label="variable: _uniswapV2Router\ncontract IUniswapV2Router02\ntests/contract_testcases/evm/interface_inheritance.sol:46:93-109"]
+	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/evm/interface_inheritance.sol:1:1-23"]
+	diagnostic_80 [label="found interface 'IUniswapV2Router01'\nlevel Debug\ntests/contract_testcases/evm/interface_inheritance.sol:2:1-7:2"]
+	diagnostic_81 [label="found interface 'IUniswapV2Router02'\nlevel Debug\ntests/contract_testcases/evm/interface_inheritance.sol:8:1-18:2"]
+	diagnostic_82 [label="found interface 'IUniswapV2Factory'\nlevel Debug\ntests/contract_testcases/evm/interface_inheritance.sol:19:1-22:2"]
+	diagnostic_83 [label="found contract 'BABYLINK'\nlevel Debug\ntests/contract_testcases/evm/interface_inheritance.sol:23:1-49:2"]
 	contracts -> contract
 	contract -> factory [label="function"]
 	factory -> returns [label="returns"]

+ 0 - 0
tests/contract_testcases/ewasm/interface_inheritance.sol → tests/contract_testcases/evm/interface_inheritance.sol


+ 74 - 74
tests/contract_testcases/ewasm/llvm_type.dot → tests/contract_testcases/evm/llvm_type.dot

@@ -1,82 +1,82 @@
-strict digraph "tests/contract_testcases/ewasm/llvm_type.sol" {
-	OwnershipTransferred [label="name:OwnershipTransferred\ncontract: 1\ntests/contract_testcases/ewasm/llvm_type.sol:14:16-36\nfield name:previousOwner ty:address indexed:yes\nfield name:newOwner ty:address indexed:yes"]
-	contract [label="contract Context\ntests/contract_testcases/ewasm/llvm_type.sol:1:1-9:2"]
-	_msgSender [label="function _msgSender\ncontract: Context\ntests/contract_testcases/ewasm/llvm_type.sol:2:9-85\nsignature _msgSender()\nvisibility internal\nmutability view\nvirtual"]
+strict digraph "tests/contract_testcases/evm/llvm_type.sol" {
+	OwnershipTransferred [label="name:OwnershipTransferred\ncontract: 1\ntests/contract_testcases/evm/llvm_type.sol:14:16-36\nfield name:previousOwner ty:address indexed:yes\nfield name:newOwner ty:address indexed:yes"]
+	contract [label="contract Context\ntests/contract_testcases/evm/llvm_type.sol:1:1-9:2"]
+	_msgSender [label="function _msgSender\ncontract: Context\ntests/contract_testcases/evm/llvm_type.sol:2:9-85\nsignature _msgSender()\nvisibility internal\nmutability view\nvirtual"]
 	returns [label="returns\naddress payable "]
-	return [label="return\ntests/contract_testcases/ewasm/llvm_type.sol:3:17-44"]
-	builtins [label="builtin Sender\ntests/contract_testcases/ewasm/llvm_type.sol:3:33-43"]
-	_msgData [label="function _msgData\ncontract: Context\ntests/contract_testcases/ewasm/llvm_type.sol:5:9-80\nsignature _msgData()\nvisibility internal\nmutability view\nvirtual"]
+	return [label="return\ntests/contract_testcases/evm/llvm_type.sol:3:17-44"]
+	builtins [label="builtin Sender\ntests/contract_testcases/evm/llvm_type.sol:3:33-43"]
+	_msgData [label="function _msgData\ncontract: Context\ntests/contract_testcases/evm/llvm_type.sol:5:9-80\nsignature _msgData()\nvisibility internal\nmutability view\nvirtual"]
 	returns_9 [label="returns\nbytes "]
-	expr [label="expression\ntests/contract_testcases/ewasm/llvm_type.sol:6:17-21"]
-	builtins_11 [label="builtin GetAddress\ntests/contract_testcases/ewasm/llvm_type.sol:6:17-21"]
-	return_12 [label="return\ntests/contract_testcases/ewasm/llvm_type.sol:7:17-33"]
-	builtins_13 [label="builtin Calldata\ntests/contract_testcases/ewasm/llvm_type.sol:7:25-33"]
-	contract_14 [label="contract Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:10:1-43:2"]
-	base [label="base Context\ntests/contract_testcases/ewasm/llvm_type.sol:11:24-31"]
-	var [label="variable _owner\nvisibility private\ntests/contract_testcases/ewasm/llvm_type.sol:12:9-33"]
-	node_17 [label="constructor \ncontract: Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:15:9-26\nsignature ()\nvisibility public\nmutability nonpayable"]
-	var_decl [label="variable decl address msgSender\ntests/contract_testcases/ewasm/llvm_type.sol:16:17-52"]
-	cast [label="cast address\ntests/contract_testcases/ewasm/llvm_type.sol:16:40-52"]
-	call_internal_function [label="call internal function\ntests/contract_testcases/ewasm/llvm_type.sol:16:40-52"]
-	internal_function [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/llvm_type.sol:16:40-52"]
-	expr_22 [label="expression\ntests/contract_testcases/ewasm/llvm_type.sol:17:17-37"]
-	assign [label="assign\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:17:17-23"]
-	storage_var [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:17:17-23"]
-	variable [label="variable: msgSender\naddress\ntests/contract_testcases/ewasm/llvm_type.sol:17:28-37"]
-	emit [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/ewasm/llvm_type.sol:18:17-67"]
-	number_literal [label="address literal: 0\ntests/contract_testcases/ewasm/llvm_type.sol:18:44-54"]
-	variable_28 [label="variable: msgSender\naddress\ntests/contract_testcases/ewasm/llvm_type.sol:18:57-66"]
-	owner [label="function owner\ncontract: Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:20:9-60\nsignature owner()\nvisibility public\nmutability view"]
+	expr [label="expression\ntests/contract_testcases/evm/llvm_type.sol:6:17-21"]
+	builtins_11 [label="builtin GetAddress\ntests/contract_testcases/evm/llvm_type.sol:6:17-21"]
+	return_12 [label="return\ntests/contract_testcases/evm/llvm_type.sol:7:17-33"]
+	builtins_13 [label="builtin Calldata\ntests/contract_testcases/evm/llvm_type.sol:7:25-33"]
+	contract_14 [label="contract Ownable\ntests/contract_testcases/evm/llvm_type.sol:10:1-43:2"]
+	base [label="base Context\ntests/contract_testcases/evm/llvm_type.sol:11:24-31"]
+	var [label="variable _owner\nvisibility private\ntests/contract_testcases/evm/llvm_type.sol:12:9-33"]
+	node_17 [label="constructor \ncontract: Ownable\ntests/contract_testcases/evm/llvm_type.sol:15:9-26\nsignature ()\nvisibility public\nmutability nonpayable"]
+	var_decl [label="variable decl address msgSender\ntests/contract_testcases/evm/llvm_type.sol:16:17-52"]
+	cast [label="cast address\ntests/contract_testcases/evm/llvm_type.sol:16:40-52"]
+	call_internal_function [label="call internal function\ntests/contract_testcases/evm/llvm_type.sol:16:40-52"]
+	internal_function [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/llvm_type.sol:16:40-52"]
+	expr_22 [label="expression\ntests/contract_testcases/evm/llvm_type.sol:17:17-37"]
+	assign [label="assign\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:17:17-23"]
+	storage_var [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:17:17-23"]
+	variable [label="variable: msgSender\naddress\ntests/contract_testcases/evm/llvm_type.sol:17:28-37"]
+	emit [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/evm/llvm_type.sol:18:17-67"]
+	number_literal [label="address literal: 0\ntests/contract_testcases/evm/llvm_type.sol:18:44-54"]
+	variable_28 [label="variable: msgSender\naddress\ntests/contract_testcases/evm/llvm_type.sol:18:57-66"]
+	owner [label="function owner\ncontract: Ownable\ntests/contract_testcases/evm/llvm_type.sol:20:9-60\nsignature owner()\nvisibility public\nmutability view"]
 	returns_30 [label="returns\naddress "]
-	return_31 [label="return\ntests/contract_testcases/ewasm/llvm_type.sol:21:17-31"]
-	storage_load [label="storage load address\ntests/contract_testcases/ewasm/llvm_type.sol:21:17-31"]
-	storage_var_33 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:21:25-31"]
-	onlyOwner [label="modifier onlyOwner\ncontract: Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:24:9-32\nmutability nonpayable"]
-	expr_35 [label="expression\ntests/contract_testcases/ewasm/llvm_type.sol:25:17-92"]
-	builtins_36 [label="builtin Require\ntests/contract_testcases/ewasm/llvm_type.sol:25:17-24"]
-	equal [label="equal\ntests/contract_testcases/ewasm/llvm_type.sol:25:25-49"]
-	storage_load_38 [label="storage load address\ntests/contract_testcases/ewasm/llvm_type.sol:25:25-31"]
-	storage_var_39 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:25:25-31"]
-	cast_40 [label="cast address\ntests/contract_testcases/ewasm/llvm_type.sol:25:37-49"]
-	call_internal_function_41 [label="call internal function\ntests/contract_testcases/ewasm/llvm_type.sol:25:37-49"]
-	internal_function_42 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/llvm_type.sol:25:37-49"]
-	alloc_array [label="alloc array string\ninitializer: 4f776e61626c653a202063616c6c65722020697320206e6f74202074686520206f776e6572\ntests/contract_testcases/ewasm/llvm_type.sol:25:52-91"]
-	number_literal_44 [label="uint32 literal: 37\ntests/contract_testcases/ewasm/llvm_type.sol:25:52-91"]
-	underscore [label="undersore\ntests/contract_testcases/ewasm/llvm_type.sol:26:17-18"]
-	waiveOwnership [label="function waiveOwnership\ncontract: Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:29:9-63\nsignature waiveOwnership()\nvisibility public\nmutability nonpayable\nvirtual"]
-	emit_47 [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/ewasm/llvm_type.sol:30:17-64"]
-	storage_load_48 [label="storage load address\ntests/contract_testcases/ewasm/llvm_type.sol:30:44-50"]
-	storage_var_49 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:30:44-50"]
-	number_literal_50 [label="address literal: 0\ntests/contract_testcases/ewasm/llvm_type.sol:30:53-63"]
-	expr_51 [label="expression\ntests/contract_testcases/ewasm/llvm_type.sol:31:17-38"]
-	assign_52 [label="assign\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:31:17-23"]
-	storage_var_53 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:31:17-23"]
-	number_literal_54 [label="address literal: 0\ntests/contract_testcases/ewasm/llvm_type.sol:31:28-38"]
-	transferOwnership [label="function transferOwnership\ncontract: Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:34:9-83\nsignature transferOwnership(address)\nvisibility public\nmutability nonpayable\nvirtual"]
+	return_31 [label="return\ntests/contract_testcases/evm/llvm_type.sol:21:17-31"]
+	storage_load [label="storage load address\ntests/contract_testcases/evm/llvm_type.sol:21:17-31"]
+	storage_var_33 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:21:25-31"]
+	onlyOwner [label="modifier onlyOwner\ncontract: Ownable\ntests/contract_testcases/evm/llvm_type.sol:24:9-32\nmutability nonpayable"]
+	expr_35 [label="expression\ntests/contract_testcases/evm/llvm_type.sol:25:17-92"]
+	builtins_36 [label="builtin Require\ntests/contract_testcases/evm/llvm_type.sol:25:17-24"]
+	equal [label="equal\ntests/contract_testcases/evm/llvm_type.sol:25:25-49"]
+	storage_load_38 [label="storage load address\ntests/contract_testcases/evm/llvm_type.sol:25:25-31"]
+	storage_var_39 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:25:25-31"]
+	cast_40 [label="cast address\ntests/contract_testcases/evm/llvm_type.sol:25:37-49"]
+	call_internal_function_41 [label="call internal function\ntests/contract_testcases/evm/llvm_type.sol:25:37-49"]
+	internal_function_42 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/evm/llvm_type.sol:25:37-49"]
+	alloc_array [label="alloc array string\ninitializer: 4f776e61626c653a202063616c6c65722020697320206e6f74202074686520206f776e6572\ntests/contract_testcases/evm/llvm_type.sol:25:52-91"]
+	number_literal_44 [label="uint32 literal: 37\ntests/contract_testcases/evm/llvm_type.sol:25:52-91"]
+	underscore [label="undersore\ntests/contract_testcases/evm/llvm_type.sol:26:17-18"]
+	waiveOwnership [label="function waiveOwnership\ncontract: Ownable\ntests/contract_testcases/evm/llvm_type.sol:29:9-63\nsignature waiveOwnership()\nvisibility public\nmutability nonpayable\nvirtual"]
+	emit_47 [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/evm/llvm_type.sol:30:17-64"]
+	storage_load_48 [label="storage load address\ntests/contract_testcases/evm/llvm_type.sol:30:44-50"]
+	storage_var_49 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:30:44-50"]
+	number_literal_50 [label="address literal: 0\ntests/contract_testcases/evm/llvm_type.sol:30:53-63"]
+	expr_51 [label="expression\ntests/contract_testcases/evm/llvm_type.sol:31:17-38"]
+	assign_52 [label="assign\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:31:17-23"]
+	storage_var_53 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:31:17-23"]
+	number_literal_54 [label="address literal: 0\ntests/contract_testcases/evm/llvm_type.sol:31:28-38"]
+	transferOwnership [label="function transferOwnership\ncontract: Ownable\ntests/contract_testcases/evm/llvm_type.sol:34:9-83\nsignature transferOwnership(address)\nvisibility public\nmutability nonpayable\nvirtual"]
 	parameters [label="parameters\naddress newOwner"]
-	expr_57 [label="expression\ntests/contract_testcases/ewasm/llvm_type.sol:35:17-99"]
-	builtins_58 [label="builtin Require\ntests/contract_testcases/ewasm/llvm_type.sol:35:17-24"]
-	not [label="not\ntests/contract_testcases/ewasm/llvm_type.sol:35:25-49"]
-	equal_60 [label="equal\ntests/contract_testcases/ewasm/llvm_type.sol:35:25-49"]
-	variable_61 [label="variable: newOwner\naddress\ntests/contract_testcases/ewasm/llvm_type.sol:35:25-33"]
-	number_literal_62 [label="address literal: 0\ntests/contract_testcases/ewasm/llvm_type.sol:35:39-49"]
-	alloc_array_63 [label="alloc array string\ninitializer: 4f776e61626c653a20206e657720206f776e657220206973202074686520207a65726f202061646472657373\ntests/contract_testcases/ewasm/llvm_type.sol:35:52-98"]
-	number_literal_64 [label="uint32 literal: 44\ntests/contract_testcases/ewasm/llvm_type.sol:35:52-98"]
-	emit_65 [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/ewasm/llvm_type.sol:36:17-62"]
-	storage_load_66 [label="storage load address\ntests/contract_testcases/ewasm/llvm_type.sol:36:44-50"]
-	storage_var_67 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:36:44-50"]
-	variable_68 [label="variable: newOwner\naddress\ntests/contract_testcases/ewasm/llvm_type.sol:36:53-61"]
-	expr_69 [label="expression\ntests/contract_testcases/ewasm/llvm_type.sol:37:17-36"]
-	assign_70 [label="assign\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:37:17-23"]
-	storage_var_71 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/llvm_type.sol:37:17-23"]
-	variable_72 [label="variable: newOwner\naddress\ntests/contract_testcases/ewasm/llvm_type.sol:37:28-36"]
-	getTime [label="function getTime\ncontract: Ownable\ntests/contract_testcases/ewasm/llvm_type.sol:40:9-62\nsignature getTime()\nvisibility public\nmutability view"]
+	expr_57 [label="expression\ntests/contract_testcases/evm/llvm_type.sol:35:17-99"]
+	builtins_58 [label="builtin Require\ntests/contract_testcases/evm/llvm_type.sol:35:17-24"]
+	not [label="not\ntests/contract_testcases/evm/llvm_type.sol:35:25-49"]
+	equal_60 [label="equal\ntests/contract_testcases/evm/llvm_type.sol:35:25-49"]
+	variable_61 [label="variable: newOwner\naddress\ntests/contract_testcases/evm/llvm_type.sol:35:25-33"]
+	number_literal_62 [label="address literal: 0\ntests/contract_testcases/evm/llvm_type.sol:35:39-49"]
+	alloc_array_63 [label="alloc array string\ninitializer: 4f776e61626c653a20206e657720206f776e657220206973202074686520207a65726f202061646472657373\ntests/contract_testcases/evm/llvm_type.sol:35:52-98"]
+	number_literal_64 [label="uint32 literal: 44\ntests/contract_testcases/evm/llvm_type.sol:35:52-98"]
+	emit_65 [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/evm/llvm_type.sol:36:17-62"]
+	storage_load_66 [label="storage load address\ntests/contract_testcases/evm/llvm_type.sol:36:44-50"]
+	storage_var_67 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:36:44-50"]
+	variable_68 [label="variable: newOwner\naddress\ntests/contract_testcases/evm/llvm_type.sol:36:53-61"]
+	expr_69 [label="expression\ntests/contract_testcases/evm/llvm_type.sol:37:17-36"]
+	assign_70 [label="assign\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:37:17-23"]
+	storage_var_71 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/evm/llvm_type.sol:37:17-23"]
+	variable_72 [label="variable: newOwner\naddress\ntests/contract_testcases/evm/llvm_type.sol:37:28-36"]
+	getTime [label="function getTime\ncontract: Ownable\ntests/contract_testcases/evm/llvm_type.sol:40:9-62\nsignature getTime()\nvisibility public\nmutability view"]
 	returns_74 [label="returns\nuint256 "]
-	return_75 [label="return\ntests/contract_testcases/ewasm/llvm_type.sol:41:17-40"]
-	zero_ext [label="zero extend uint256\ntests/contract_testcases/ewasm/llvm_type.sol:41:17-40"]
-	builtins_77 [label="builtin Timestamp\ntests/contract_testcases/ewasm/llvm_type.sol:41:25-40"]
-	diagnostic [label="found abstract contract 'Context'\nlevel Debug\ntests/contract_testcases/ewasm/llvm_type.sol:1:1-9:2"]
-	diagnostic_80 [label="found contract 'Ownable'\nlevel Debug\ntests/contract_testcases/ewasm/llvm_type.sol:10:1-43:2"]
+	return_75 [label="return\ntests/contract_testcases/evm/llvm_type.sol:41:17-40"]
+	zero_ext [label="zero extend uint256\ntests/contract_testcases/evm/llvm_type.sol:41:17-40"]
+	builtins_77 [label="builtin Timestamp\ntests/contract_testcases/evm/llvm_type.sol:41:25-40"]
+	diagnostic [label="found abstract contract 'Context'\nlevel Debug\ntests/contract_testcases/evm/llvm_type.sol:1:1-9:2"]
+	diagnostic_80 [label="found contract 'Ownable'\nlevel Debug\ntests/contract_testcases/evm/llvm_type.sol:10:1-43:2"]
 	events -> OwnershipTransferred
 	contracts -> contract
 	contract -> _msgSender [label="function"]

+ 0 - 0
tests/contract_testcases/ewasm/llvm_type.sol → tests/contract_testcases/evm/llvm_type.sol


+ 10 - 0
tests/contract_testcases/evm/public_internal_function.dot

@@ -0,0 +1,10 @@
+strict digraph "tests/contract_testcases/evm/public_internal_function.sol" {
+	A [label="name:A\ncontract: foo\ntests/contract_testcases/evm/public_internal_function.sol:2:12-13\nfield name:a ty:function() internal"]
+	contract [label="contract foo\ntests/contract_testcases/evm/public_internal_function.sol:1:1-7:2"]
+	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/evm/public_internal_function.sol:1:1-7:2"]
+	diagnostic_6 [label="variable of type internal function cannot be 'public'\nlevel Error\ntests/contract_testcases/evm/public_internal_function.sol:6:5-8"]
+	structs -> A
+	contracts -> contract
+	diagnostics -> diagnostic [label="Debug"]
+	diagnostics -> diagnostic_6 [label="Error"]
+}

+ 0 - 0
tests/contract_testcases/ewasm/public_internal_function.sol → tests/contract_testcases/evm/public_internal_function.sol


+ 7 - 7
tests/contract_testcases/ewasm/public_mapping.dot → tests/contract_testcases/evm/public_mapping.dot

@@ -1,8 +1,8 @@
-strict digraph "tests/contract_testcases/ewasm/public_mapping.sol" {
-	A [label="name:A\ncontract: foo\ntests/contract_testcases/ewasm/public_mapping.sol:2:12-13\nfield name:a ty:mapping(uint64 => uint64)"]
-	contract [label="contract foo\ntests/contract_testcases/ewasm/public_mapping.sol:1:1-7:2"]
-	var [label="variable map\nvisibility public\ntests/contract_testcases/ewasm/public_mapping.sol:6:5-19"]
-	map [label="function map\ncontract: foo\ntests/contract_testcases/ewasm/public_mapping.sol:6:16-19\nsignature map(uint256)\nvisibility public\nmutability view"]
+strict digraph "tests/contract_testcases/evm/public_mapping.sol" {
+	A [label="name:A\ncontract: foo\ntests/contract_testcases/evm/public_mapping.sol:2:12-13\nfield name:a ty:mapping(uint64 => uint64)"]
+	contract [label="contract foo\ntests/contract_testcases/evm/public_mapping.sol:1:1-7:2"]
+	var [label="variable map\nvisibility public\ntests/contract_testcases/evm/public_mapping.sol:6:5-19"]
+	map [label="function map\ncontract: foo\ntests/contract_testcases/evm/public_mapping.sol:6:16-19\nsignature map(uint256)\nvisibility public\nmutability view"]
 	parameters [label="parameters\nuint256 "]
 	returns [label="returns\nstruct foo.A "]
 	return [label="return\nimplicit"]
@@ -10,8 +10,8 @@ strict digraph "tests/contract_testcases/ewasm/public_mapping.sol" {
 	subscript [label="subscript struct foo.A[] storage\nimplicit"]
 	storage_var [label="storage variable\nfoo.map\nstruct foo.A[] storage\nimplicit"]
 	variable [label="variable: \nuint256\nimplicit"]
-	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/ewasm/public_mapping.sol:1:1-7:2"]
-	diagnostic_15 [label="mapping in a struct variable cannot be public\nlevel Error\ntests/contract_testcases/ewasm/public_mapping.sol:6:5-19"]
+	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/evm/public_mapping.sol:1:1-7:2"]
+	diagnostic_15 [label="mapping in a struct variable cannot be public\nlevel Error\ntests/contract_testcases/evm/public_mapping.sol:6:5-19"]
 	structs -> A
 	contracts -> contract
 	contract -> var [label="variable"]

+ 0 - 0
tests/contract_testcases/ewasm/public_mapping.sol → tests/contract_testcases/evm/public_mapping.sol


+ 373 - 373
tests/contract_testcases/ewasm/rubixi.dot → tests/contract_testcases/evm/rubixi.dot

@@ -1,391 +1,391 @@
-strict digraph "tests/contract_testcases/ewasm/rubixi.sol" {
-	Participant [label="name:Participant\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:25:17-28\nfield name:etherAddress ty:address\nfield name:payout ty:uint256"]
-	contract [label="contract Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:4:2-156:3"]
-	var [label="variable balance\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:7:10-34"]
-	number_literal [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:7:33-34"]
-	var_6 [label="variable collectedFees\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:8:10-40"]
-	number_literal_7 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:8:39-40"]
-	var_8 [label="variable feePercent\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:9:10-38"]
-	number_literal_9 [label="uint256 literal: 10\ntests/contract_testcases/ewasm/rubixi.sol:9:36-38"]
-	var_10 [label="variable pyramidMultiplier\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:10:10-46"]
-	number_literal_11 [label="uint256 literal: 300\ntests/contract_testcases/ewasm/rubixi.sol:10:43-46"]
-	var_12 [label="variable payoutOrder\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:11:10-38"]
-	number_literal_13 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:11:37-38"]
-	var_14 [label="variable creator\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:13:10-33"]
-	var_15 [label="variable participants\nvisibility private\ntests/contract_testcases/ewasm/rubixi.sol:30:10-44"]
-	DynamicPyramid [label="function DynamicPyramid\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:17:10-42\nsignature DynamicPyramid()\nvisibility public\nmutability nonpayable"]
-	expr [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:18:18-38"]
-	assign [label="assign\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:18:18-25"]
-	storage_var [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:18:18-25"]
-	cast [label="cast address\ntests/contract_testcases/ewasm/rubixi.sol:18:28-38"]
-	builtins [label="builtin Sender\ntests/contract_testcases/ewasm/rubixi.sol:18:28-38"]
-	onlyowner [label="modifier onlyowner\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:21:10-29\nmutability nonpayable"]
-	if [label="if\ntests/contract_testcases/ewasm/rubixi.sol:22:18-47"]
-	equal [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:22:22-43"]
-	cast_25 [label="cast address\ntests/contract_testcases/ewasm/rubixi.sol:22:22-32"]
-	builtins_26 [label="builtin Sender\ntests/contract_testcases/ewasm/rubixi.sol:22:22-32"]
-	storage_load [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:22:36-43"]
-	storage_var_28 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:22:36-43"]
-	underscore [label="undersore\ntests/contract_testcases/ewasm/rubixi.sol:22:45-46"]
-	node_30 [label="constructor \ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:33:10-25\nsignature ()\nvisibility public\nmutability nonpayable"]
-	expr_31 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:34:18-24"]
-	call_internal_function [label="call internal function\ntests/contract_testcases/ewasm/rubixi.sol:34:18-24"]
-	internal_function [label="function() internal returns (void)\nRubixi.init\ntests/contract_testcases/ewasm/rubixi.sol:34:18-24"]
-	init [label="function init\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:38:10-33\nsignature init()\nvisibility private\nmutability nonpayable"]
-	if_35 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:40:18-43:19"]
-	less [label="less\ntests/contract_testcases/ewasm/rubixi.sol:40:22-41"]
-	cast_37 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:40:22-31"]
-	builtins_38 [label="builtin Value\ntests/contract_testcases/ewasm/rubixi.sol:40:22-31"]
-	number_literal_39 [label="uint128 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:40:34-41"]
-	expr_40 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:41:26-52"]
-	assign_41 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:41:26-52"]
-	storage_var_42 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:41:26-39"]
-	add [label="add\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:41:26-52"]
-	storage_load_44 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:41:26-52"]
-	storage_var_45 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:41:26-39"]
-	sign_ext [label="sign extend uint256\ntests/contract_testcases/ewasm/rubixi.sol:41:43-52"]
-	builtins_47 [label="builtin Value\ntests/contract_testcases/ewasm/rubixi.sol:41:43-52"]
-	return [label="return\ntests/contract_testcases/ewasm/rubixi.sol:42:26-32"]
-	var_decl [label="variable decl uint256 _fee\ntests/contract_testcases/ewasm/rubixi.sol:45:18-40"]
-	storage_load_50 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:45:30-40"]
-	storage_var_51 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:45:30-40"]
-	if_52 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:47:18-55"]
-	more_equal [label="more equal\ntests/contract_testcases/ewasm/rubixi.sol:47:22-43"]
-	cast_54 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:47:22-31"]
-	builtins_55 [label="builtin Value\ntests/contract_testcases/ewasm/rubixi.sol:47:22-31"]
-	number_literal_56 [label="uint128 literal: 50000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:47:35-43"]
-	expr_57 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:47:45-54"]
-	assign_58 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:47:45-54"]
-	variable [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:47:45-49"]
-	divide [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:47:45-54"]
-	variable_61 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:47:45-49"]
-	number_literal_62 [label="uint256 literal: 2\ntests/contract_testcases/ewasm/rubixi.sol:47:53-54"]
-	expr_63 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:49:18-33"]
-	call_internal_function_64 [label="call internal function\ntests/contract_testcases/ewasm/rubixi.sol:49:18-33"]
-	internal_function_65 [label="function(uint256) internal returns (void)\nRubixi.addPayout\ntests/contract_testcases/ewasm/rubixi.sol:49:18-33"]
-	variable_66 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:49:28-32"]
-	addPayout [label="function addPayout\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:53:10-47\nsignature addPayout(uint256)\nvisibility private\nmutability nonpayable"]
+strict digraph "tests/contract_testcases/evm/rubixi.sol" {
+	Participant [label="name:Participant\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:25:17-28\nfield name:etherAddress ty:address\nfield name:payout ty:uint256"]
+	contract [label="contract Rubixi\ntests/contract_testcases/evm/rubixi.sol:4:2-156:3"]
+	var [label="variable balance\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:7:10-34"]
+	number_literal [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:7:33-34"]
+	var_6 [label="variable collectedFees\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:8:10-40"]
+	number_literal_7 [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:8:39-40"]
+	var_8 [label="variable feePercent\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:9:10-38"]
+	number_literal_9 [label="uint256 literal: 10\ntests/contract_testcases/evm/rubixi.sol:9:36-38"]
+	var_10 [label="variable pyramidMultiplier\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:10:10-46"]
+	number_literal_11 [label="uint256 literal: 300\ntests/contract_testcases/evm/rubixi.sol:10:43-46"]
+	var_12 [label="variable payoutOrder\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:11:10-38"]
+	number_literal_13 [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:11:37-38"]
+	var_14 [label="variable creator\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:13:10-33"]
+	var_15 [label="variable participants\nvisibility private\ntests/contract_testcases/evm/rubixi.sol:30:10-44"]
+	DynamicPyramid [label="function DynamicPyramid\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:17:10-42\nsignature DynamicPyramid()\nvisibility public\nmutability nonpayable"]
+	expr [label="expression\ntests/contract_testcases/evm/rubixi.sol:18:18-38"]
+	assign [label="assign\naddress storage\ntests/contract_testcases/evm/rubixi.sol:18:18-25"]
+	storage_var [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/evm/rubixi.sol:18:18-25"]
+	cast [label="cast address\ntests/contract_testcases/evm/rubixi.sol:18:28-38"]
+	builtins [label="builtin Sender\ntests/contract_testcases/evm/rubixi.sol:18:28-38"]
+	onlyowner [label="modifier onlyowner\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:21:10-29\nmutability nonpayable"]
+	if [label="if\ntests/contract_testcases/evm/rubixi.sol:22:18-47"]
+	equal [label="equal\ntests/contract_testcases/evm/rubixi.sol:22:22-43"]
+	cast_25 [label="cast address\ntests/contract_testcases/evm/rubixi.sol:22:22-32"]
+	builtins_26 [label="builtin Sender\ntests/contract_testcases/evm/rubixi.sol:22:22-32"]
+	storage_load [label="storage load address\ntests/contract_testcases/evm/rubixi.sol:22:36-43"]
+	storage_var_28 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/evm/rubixi.sol:22:36-43"]
+	underscore [label="undersore\ntests/contract_testcases/evm/rubixi.sol:22:45-46"]
+	node_30 [label="constructor \ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:33:10-25\nsignature ()\nvisibility public\nmutability nonpayable"]
+	expr_31 [label="expression\ntests/contract_testcases/evm/rubixi.sol:34:18-24"]
+	call_internal_function [label="call internal function\ntests/contract_testcases/evm/rubixi.sol:34:18-24"]
+	internal_function [label="function() internal returns (void)\nRubixi.init\ntests/contract_testcases/evm/rubixi.sol:34:18-24"]
+	init [label="function init\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:38:10-33\nsignature init()\nvisibility private\nmutability nonpayable"]
+	if_35 [label="if\ntests/contract_testcases/evm/rubixi.sol:40:18-43:19"]
+	less [label="less\ntests/contract_testcases/evm/rubixi.sol:40:22-41"]
+	cast_37 [label="cast uint128\ntests/contract_testcases/evm/rubixi.sol:40:22-31"]
+	builtins_38 [label="builtin Value\ntests/contract_testcases/evm/rubixi.sol:40:22-31"]
+	number_literal_39 [label="uint128 literal: 1000000000000000000\ntests/contract_testcases/evm/rubixi.sol:40:34-41"]
+	expr_40 [label="expression\ntests/contract_testcases/evm/rubixi.sol:41:26-52"]
+	assign_41 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:41:26-52"]
+	storage_var_42 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:41:26-39"]
+	add [label="add\nuint256\ntests/contract_testcases/evm/rubixi.sol:41:26-52"]
+	storage_load_44 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:41:26-52"]
+	storage_var_45 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:41:26-39"]
+	sign_ext [label="sign extend uint256\ntests/contract_testcases/evm/rubixi.sol:41:43-52"]
+	builtins_47 [label="builtin Value\ntests/contract_testcases/evm/rubixi.sol:41:43-52"]
+	return [label="return\ntests/contract_testcases/evm/rubixi.sol:42:26-32"]
+	var_decl [label="variable decl uint256 _fee\ntests/contract_testcases/evm/rubixi.sol:45:18-40"]
+	storage_load_50 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:45:30-40"]
+	storage_var_51 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:45:30-40"]
+	if_52 [label="if\ntests/contract_testcases/evm/rubixi.sol:47:18-55"]
+	more_equal [label="more equal\ntests/contract_testcases/evm/rubixi.sol:47:22-43"]
+	cast_54 [label="cast uint128\ntests/contract_testcases/evm/rubixi.sol:47:22-31"]
+	builtins_55 [label="builtin Value\ntests/contract_testcases/evm/rubixi.sol:47:22-31"]
+	number_literal_56 [label="uint128 literal: 50000000000000000000\ntests/contract_testcases/evm/rubixi.sol:47:35-43"]
+	expr_57 [label="expression\ntests/contract_testcases/evm/rubixi.sol:47:45-54"]
+	assign_58 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:47:45-54"]
+	variable [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:47:45-49"]
+	divide [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:47:45-54"]
+	variable_61 [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:47:45-49"]
+	number_literal_62 [label="uint256 literal: 2\ntests/contract_testcases/evm/rubixi.sol:47:53-54"]
+	expr_63 [label="expression\ntests/contract_testcases/evm/rubixi.sol:49:18-33"]
+	call_internal_function_64 [label="call internal function\ntests/contract_testcases/evm/rubixi.sol:49:18-33"]
+	internal_function_65 [label="function(uint256) internal returns (void)\nRubixi.addPayout\ntests/contract_testcases/evm/rubixi.sol:49:18-33"]
+	variable_66 [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:49:28-32"]
+	addPayout [label="function addPayout\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:53:10-47\nsignature addPayout(uint256)\nvisibility private\nmutability nonpayable"]
 	parameters [label="parameters\nuint256 _fee"]
-	expr_69 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:55:18-99"]
-	builtins_70 [label="builtin ArrayPush\ntests/contract_testcases/ewasm/rubixi.sol:55:31-35"]
-	storage_var_71 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:55:18-30"]
-	struct_literal [label="struct literal: struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:55:36-98"]
-	cast_73 [label="cast address\ntests/contract_testcases/ewasm/rubixi.sol:55:36-98"]
-	builtins_74 [label="builtin Sender\ntests/contract_testcases/ewasm/rubixi.sol:55:48-58"]
-	divide_75 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:55:60-97"]
-	multiply [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:55:61-90"]
-	sign_ext_77 [label="sign extend uint256\ntests/contract_testcases/ewasm/rubixi.sol:55:61-70"]
-	builtins_78 [label="builtin Value\ntests/contract_testcases/ewasm/rubixi.sol:55:61-70"]
-	storage_load_79 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:55:73-90"]
-	storage_var_80 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:55:73-90"]
-	number_literal_81 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:55:94-97"]
-	if_82 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:58:18-59:78"]
-	equal_83 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:58:22-47"]
-	array_length [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:58:35-41"]
-	storage_var_85 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:58:22-34"]
-	number_literal_86 [label="uint256 literal: 10\ntests/contract_testcases/ewasm/rubixi.sol:58:45-47"]
-	expr_87 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:58:49-72"]
-	assign_88 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:58:49-66"]
-	storage_var_89 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:58:49-66"]
-	number_literal_90 [label="uint256 literal: 200\ntests/contract_testcases/ewasm/rubixi.sol:58:69-72"]
-	if_91 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:59:23-78"]
-	equal_92 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:59:27-52"]
-	array_length_93 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:59:40-46"]
-	storage_var_94 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:59:27-39"]
-	number_literal_95 [label="uint256 literal: 25\ntests/contract_testcases/ewasm/rubixi.sol:59:50-52"]
-	expr_96 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:59:54-77"]
-	assign_97 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:59:54-71"]
-	storage_var_98 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:59:54-71"]
-	number_literal_99 [label="uint256 literal: 150\ntests/contract_testcases/ewasm/rubixi.sol:59:74-77"]
-	expr_100 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:62:18-61"]
-	assign_101 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:62:18-61"]
-	storage_var_102 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:62:18-25"]
-	add_103 [label="add\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:62:18-61"]
-	storage_load_104 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:62:18-61"]
-	storage_var_105 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:62:18-25"]
-	divide_106 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:62:29-61"]
-	multiply_107 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:62:30-54"]
-	sign_ext_108 [label="sign extend uint256\ntests/contract_testcases/ewasm/rubixi.sol:62:30-39"]
-	builtins_109 [label="builtin Value\ntests/contract_testcases/ewasm/rubixi.sol:62:30-39"]
-	subtract [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:62:43-53"]
-	number_literal_111 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:62:43-46"]
-	variable_112 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:62:49-53"]
-	number_literal_113 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:62:58-61"]
-	expr_114 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:63:18-59"]
-	assign_115 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:63:18-59"]
-	storage_var_116 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:63:18-31"]
-	add_117 [label="add\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:63:18-59"]
-	storage_load_118 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:63:18-59"]
-	storage_var_119 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:63:18-31"]
-	divide_120 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:63:35-59"]
-	multiply_121 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:63:36-52"]
-	sign_ext_122 [label="sign extend uint256\ntests/contract_testcases/ewasm/rubixi.sol:63:36-45"]
-	builtins_123 [label="builtin Value\ntests/contract_testcases/ewasm/rubixi.sol:63:36-45"]
-	variable_124 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:63:48-52"]
-	number_literal_125 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:63:56-59"]
-	while [label="while\ntests/contract_testcases/ewasm/rubixi.sol:66:18-72:19"]
-	more [label="more\ntests/contract_testcases/ewasm/rubixi.sol:66:25-67"]
-	storage_load_128 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:25-32"]
-	storage_var_129 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:25-32"]
-	storage_load_130 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:35-67"]
-	structmember [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:61-67"]
-	subscript [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:66:35-60"]
-	storage_var_133 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:66:35-47"]
-	storage_load_134 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:66:48-59"]
-	storage_var_135 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:66:48-59"]
-	var_decl_136 [label="variable decl uint256 payoutToSend\ntests/contract_testcases/ewasm/rubixi.sol:67:26-78"]
-	storage_load_137 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:67:72-78"]
-	structmember_138 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:67:72-78"]
-	subscript_139 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:67:46-71"]
-	storage_var_140 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:67:46-58"]
-	storage_load_141 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:67:59-70"]
-	storage_var_142 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:67:59-70"]
-	expr_143 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:70:26-69"]
-	assign_144 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:70:26-69"]
-	storage_var_145 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:26-33"]
-	subtract_146 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:70:26-69"]
-	storage_load_147 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:26-69"]
-	storage_var_148 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:26-33"]
-	storage_load_149 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:37-69"]
-	structmember_150 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:63-69"]
-	subscript_151 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:70:37-62"]
-	storage_var_152 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:70:37-49"]
-	storage_load_153 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:70:50-61"]
-	storage_var_154 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:70:50-61"]
-	expr_155 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:71:26-42"]
-	assign_156 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:71:26-42"]
-	storage_var_157 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:71:26-37"]
-	add_158 [label="add\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:71:26-42"]
-	storage_load_159 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:71:26-42"]
-	storage_var_160 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:71:26-37"]
-	number_literal_161 [label="uint256 literal: 1\ntests/contract_testcases/ewasm/rubixi.sol:71:41-42"]
-	collectAllFees [label="function collectAllFees\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:76:10-52\nsignature collectAllFees()\nvisibility public\nmutability nonpayable"]
-	if_163 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:77:18-51"]
-	equal_164 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:77:22-40"]
-	storage_load_165 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:77:22-35"]
-	storage_var_166 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:77:22-35"]
-	number_literal_167 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:77:39-40"]
-	expr_168 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:77:42-50"]
-	builtins_169 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:77:42-48"]
-	expr_170 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:79:18-67"]
-	builtins_171 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:79:18-67"]
-	cast_172 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:79:18-34"]
-	storage_load_173 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:79:18-34"]
-	storage_var_174 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:79:26-33"]
-	cast_175 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
-	trunc [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
-	storage_load_177 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:79:44-66"]
-	storage_var_178 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:79:52-65"]
-	expr_179 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:80:18-35"]
-	assign_180 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:80:18-31"]
-	storage_var_181 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:80:18-31"]
-	number_literal_182 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:80:34-35"]
-	collectFeesInEther [label="function collectFeesInEther\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:83:10-65\nsignature collectFeesInEther(uint256)\nvisibility public\nmutability nonpayable"]
+	expr_69 [label="expression\ntests/contract_testcases/evm/rubixi.sol:55:18-99"]
+	builtins_70 [label="builtin ArrayPush\ntests/contract_testcases/evm/rubixi.sol:55:31-35"]
+	storage_var_71 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:55:18-30"]
+	struct_literal [label="struct literal: struct Rubixi.Participant\ntests/contract_testcases/evm/rubixi.sol:55:36-98"]
+	cast_73 [label="cast address\ntests/contract_testcases/evm/rubixi.sol:55:36-98"]
+	builtins_74 [label="builtin Sender\ntests/contract_testcases/evm/rubixi.sol:55:48-58"]
+	divide_75 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:55:60-97"]
+	multiply [label="multiply\nuint256\ntests/contract_testcases/evm/rubixi.sol:55:61-90"]
+	sign_ext_77 [label="sign extend uint256\ntests/contract_testcases/evm/rubixi.sol:55:61-70"]
+	builtins_78 [label="builtin Value\ntests/contract_testcases/evm/rubixi.sol:55:61-70"]
+	storage_load_79 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:55:73-90"]
+	storage_var_80 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:55:73-90"]
+	number_literal_81 [label="uint256 literal: 100\ntests/contract_testcases/evm/rubixi.sol:55:94-97"]
+	if_82 [label="if\ntests/contract_testcases/evm/rubixi.sol:58:18-59:78"]
+	equal_83 [label="equal\ntests/contract_testcases/evm/rubixi.sol:58:22-47"]
+	array_length [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/evm/rubixi.sol:58:35-41"]
+	storage_var_85 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:58:22-34"]
+	number_literal_86 [label="uint256 literal: 10\ntests/contract_testcases/evm/rubixi.sol:58:45-47"]
+	expr_87 [label="expression\ntests/contract_testcases/evm/rubixi.sol:58:49-72"]
+	assign_88 [label="assign\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:58:49-66"]
+	storage_var_89 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:58:49-66"]
+	number_literal_90 [label="uint256 literal: 200\ntests/contract_testcases/evm/rubixi.sol:58:69-72"]
+	if_91 [label="if\ntests/contract_testcases/evm/rubixi.sol:59:23-78"]
+	equal_92 [label="equal\ntests/contract_testcases/evm/rubixi.sol:59:27-52"]
+	array_length_93 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/evm/rubixi.sol:59:40-46"]
+	storage_var_94 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:59:27-39"]
+	number_literal_95 [label="uint256 literal: 25\ntests/contract_testcases/evm/rubixi.sol:59:50-52"]
+	expr_96 [label="expression\ntests/contract_testcases/evm/rubixi.sol:59:54-77"]
+	assign_97 [label="assign\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:59:54-71"]
+	storage_var_98 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:59:54-71"]
+	number_literal_99 [label="uint256 literal: 150\ntests/contract_testcases/evm/rubixi.sol:59:74-77"]
+	expr_100 [label="expression\ntests/contract_testcases/evm/rubixi.sol:62:18-61"]
+	assign_101 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:62:18-61"]
+	storage_var_102 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:62:18-25"]
+	add_103 [label="add\nuint256\ntests/contract_testcases/evm/rubixi.sol:62:18-61"]
+	storage_load_104 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:62:18-61"]
+	storage_var_105 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:62:18-25"]
+	divide_106 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:62:29-61"]
+	multiply_107 [label="multiply\nuint256\ntests/contract_testcases/evm/rubixi.sol:62:30-54"]
+	sign_ext_108 [label="sign extend uint256\ntests/contract_testcases/evm/rubixi.sol:62:30-39"]
+	builtins_109 [label="builtin Value\ntests/contract_testcases/evm/rubixi.sol:62:30-39"]
+	subtract [label="subtract\nuint256\ntests/contract_testcases/evm/rubixi.sol:62:43-53"]
+	number_literal_111 [label="uint256 literal: 100\ntests/contract_testcases/evm/rubixi.sol:62:43-46"]
+	variable_112 [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:62:49-53"]
+	number_literal_113 [label="uint256 literal: 100\ntests/contract_testcases/evm/rubixi.sol:62:58-61"]
+	expr_114 [label="expression\ntests/contract_testcases/evm/rubixi.sol:63:18-59"]
+	assign_115 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:63:18-59"]
+	storage_var_116 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:63:18-31"]
+	add_117 [label="add\nuint256\ntests/contract_testcases/evm/rubixi.sol:63:18-59"]
+	storage_load_118 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:63:18-59"]
+	storage_var_119 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:63:18-31"]
+	divide_120 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:63:35-59"]
+	multiply_121 [label="multiply\nuint256\ntests/contract_testcases/evm/rubixi.sol:63:36-52"]
+	sign_ext_122 [label="sign extend uint256\ntests/contract_testcases/evm/rubixi.sol:63:36-45"]
+	builtins_123 [label="builtin Value\ntests/contract_testcases/evm/rubixi.sol:63:36-45"]
+	variable_124 [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:63:48-52"]
+	number_literal_125 [label="uint256 literal: 100\ntests/contract_testcases/evm/rubixi.sol:63:56-59"]
+	while [label="while\ntests/contract_testcases/evm/rubixi.sol:66:18-72:19"]
+	more [label="more\ntests/contract_testcases/evm/rubixi.sol:66:25-67"]
+	storage_load_128 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:66:25-32"]
+	storage_var_129 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:66:25-32"]
+	storage_load_130 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:66:35-67"]
+	structmember [label="struct member #1 uint256 storage\ntests/contract_testcases/evm/rubixi.sol:66:61-67"]
+	subscript [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:66:35-60"]
+	storage_var_133 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:66:35-47"]
+	storage_load_134 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:66:48-59"]
+	storage_var_135 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:66:48-59"]
+	var_decl_136 [label="variable decl uint256 payoutToSend\ntests/contract_testcases/evm/rubixi.sol:67:26-78"]
+	storage_load_137 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:67:72-78"]
+	structmember_138 [label="struct member #1 uint256 storage\ntests/contract_testcases/evm/rubixi.sol:67:72-78"]
+	subscript_139 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:67:46-71"]
+	storage_var_140 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:67:46-58"]
+	storage_load_141 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:67:59-70"]
+	storage_var_142 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:67:59-70"]
+	expr_143 [label="expression\ntests/contract_testcases/evm/rubixi.sol:70:26-69"]
+	assign_144 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:70:26-69"]
+	storage_var_145 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:70:26-33"]
+	subtract_146 [label="subtract\nuint256\ntests/contract_testcases/evm/rubixi.sol:70:26-69"]
+	storage_load_147 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:70:26-69"]
+	storage_var_148 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:70:26-33"]
+	storage_load_149 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:70:37-69"]
+	structmember_150 [label="struct member #1 uint256 storage\ntests/contract_testcases/evm/rubixi.sol:70:63-69"]
+	subscript_151 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:70:37-62"]
+	storage_var_152 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:70:37-49"]
+	storage_load_153 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:70:50-61"]
+	storage_var_154 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:70:50-61"]
+	expr_155 [label="expression\ntests/contract_testcases/evm/rubixi.sol:71:26-42"]
+	assign_156 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:71:26-42"]
+	storage_var_157 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:71:26-37"]
+	add_158 [label="add\nuint256\ntests/contract_testcases/evm/rubixi.sol:71:26-42"]
+	storage_load_159 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:71:26-42"]
+	storage_var_160 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:71:26-37"]
+	number_literal_161 [label="uint256 literal: 1\ntests/contract_testcases/evm/rubixi.sol:71:41-42"]
+	collectAllFees [label="function collectAllFees\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:76:10-52\nsignature collectAllFees()\nvisibility public\nmutability nonpayable"]
+	if_163 [label="if\ntests/contract_testcases/evm/rubixi.sol:77:18-51"]
+	equal_164 [label="equal\ntests/contract_testcases/evm/rubixi.sol:77:22-40"]
+	storage_load_165 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:77:22-35"]
+	storage_var_166 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:77:22-35"]
+	number_literal_167 [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:77:39-40"]
+	expr_168 [label="expression\ntests/contract_testcases/evm/rubixi.sol:77:42-50"]
+	builtins_169 [label="builtin Revert\ntests/contract_testcases/evm/rubixi.sol:77:42-48"]
+	expr_170 [label="expression\ntests/contract_testcases/evm/rubixi.sol:79:18-67"]
+	builtins_171 [label="builtin PayableTransfer\ntests/contract_testcases/evm/rubixi.sol:79:18-67"]
+	cast_172 [label="cast address payable\ntests/contract_testcases/evm/rubixi.sol:79:18-34"]
+	storage_load_173 [label="storage load address\ntests/contract_testcases/evm/rubixi.sol:79:18-34"]
+	storage_var_174 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/evm/rubixi.sol:79:26-33"]
+	cast_175 [label="cast uint128\ntests/contract_testcases/evm/rubixi.sol:79:44-66"]
+	trunc [label="truncate uint128\ntests/contract_testcases/evm/rubixi.sol:79:44-66"]
+	storage_load_177 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:79:44-66"]
+	storage_var_178 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:79:52-65"]
+	expr_179 [label="expression\ntests/contract_testcases/evm/rubixi.sol:80:18-35"]
+	assign_180 [label="assign\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:80:18-31"]
+	storage_var_181 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:80:18-31"]
+	number_literal_182 [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:80:34-35"]
+	collectFeesInEther [label="function collectFeesInEther\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:83:10-65\nsignature collectFeesInEther(uint256)\nvisibility public\nmutability nonpayable"]
 	parameters_184 [label="parameters\nuint256 _amt"]
-	expr_185 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:84:18-33"]
-	assign_186 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:84:18-33"]
-	variable_187 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-22"]
-	multiply_188 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-33"]
-	variable_189 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:84:18-22"]
-	number_literal_190 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:84:26-33"]
-	if_191 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:85:18-61"]
-	more_192 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:85:22-42"]
-	variable_193 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:85:22-26"]
-	storage_load_194 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:85:29-42"]
-	storage_var_195 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:85:29-42"]
-	expr_196 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
-	call_internal_function_197 [label="call internal function\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
-	internal_function_198 [label="function() internal returns (void)\nRubixi.collectAllFees\ntests/contract_testcases/ewasm/rubixi.sol:85:44-60"]
-	if_199 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:87:18-51"]
-	equal_200 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:87:22-40"]
-	storage_load_201 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:87:22-35"]
-	storage_var_202 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:87:22-35"]
-	number_literal_203 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:87:39-40"]
-	expr_204 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:87:42-50"]
-	builtins_205 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:87:42-48"]
-	expr_206 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:89:18-58"]
-	builtins_207 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:89:18-58"]
-	cast_208 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:89:18-34"]
-	storage_load_209 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:89:18-34"]
-	storage_var_210 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:89:26-33"]
-	cast_211 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:89:44-57"]
-	trunc_212 [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:89:44-57"]
-	variable_213 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:89:52-56"]
-	expr_214 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:90:18-39"]
-	assign_215 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:90:18-39"]
-	storage_var_216 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:90:18-31"]
-	subtract_217 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:90:18-39"]
-	storage_load_218 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:90:18-39"]
-	storage_var_219 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:90:18-31"]
-	variable_220 [label="variable: _amt\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:90:35-39"]
-	collectPercentOfFees [label="function collectPercentOfFees\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:93:10-69\nsignature collectPercentOfFees(uint256)\nvisibility public\nmutability nonpayable"]
+	expr_185 [label="expression\ntests/contract_testcases/evm/rubixi.sol:84:18-33"]
+	assign_186 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:84:18-33"]
+	variable_187 [label="variable: _amt\nuint256\ntests/contract_testcases/evm/rubixi.sol:84:18-22"]
+	multiply_188 [label="multiply\nuint256\ntests/contract_testcases/evm/rubixi.sol:84:18-33"]
+	variable_189 [label="variable: _amt\nuint256\ntests/contract_testcases/evm/rubixi.sol:84:18-22"]
+	number_literal_190 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/evm/rubixi.sol:84:26-33"]
+	if_191 [label="if\ntests/contract_testcases/evm/rubixi.sol:85:18-61"]
+	more_192 [label="more\ntests/contract_testcases/evm/rubixi.sol:85:22-42"]
+	variable_193 [label="variable: _amt\nuint256\ntests/contract_testcases/evm/rubixi.sol:85:22-26"]
+	storage_load_194 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:85:29-42"]
+	storage_var_195 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:85:29-42"]
+	expr_196 [label="expression\ntests/contract_testcases/evm/rubixi.sol:85:44-60"]
+	call_internal_function_197 [label="call internal function\ntests/contract_testcases/evm/rubixi.sol:85:44-60"]
+	internal_function_198 [label="function() internal returns (void)\nRubixi.collectAllFees\ntests/contract_testcases/evm/rubixi.sol:85:44-60"]
+	if_199 [label="if\ntests/contract_testcases/evm/rubixi.sol:87:18-51"]
+	equal_200 [label="equal\ntests/contract_testcases/evm/rubixi.sol:87:22-40"]
+	storage_load_201 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:87:22-35"]
+	storage_var_202 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:87:22-35"]
+	number_literal_203 [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:87:39-40"]
+	expr_204 [label="expression\ntests/contract_testcases/evm/rubixi.sol:87:42-50"]
+	builtins_205 [label="builtin Revert\ntests/contract_testcases/evm/rubixi.sol:87:42-48"]
+	expr_206 [label="expression\ntests/contract_testcases/evm/rubixi.sol:89:18-58"]
+	builtins_207 [label="builtin PayableTransfer\ntests/contract_testcases/evm/rubixi.sol:89:18-58"]
+	cast_208 [label="cast address payable\ntests/contract_testcases/evm/rubixi.sol:89:18-34"]
+	storage_load_209 [label="storage load address\ntests/contract_testcases/evm/rubixi.sol:89:18-34"]
+	storage_var_210 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/evm/rubixi.sol:89:26-33"]
+	cast_211 [label="cast uint128\ntests/contract_testcases/evm/rubixi.sol:89:44-57"]
+	trunc_212 [label="truncate uint128\ntests/contract_testcases/evm/rubixi.sol:89:44-57"]
+	variable_213 [label="variable: _amt\nuint256\ntests/contract_testcases/evm/rubixi.sol:89:52-56"]
+	expr_214 [label="expression\ntests/contract_testcases/evm/rubixi.sol:90:18-39"]
+	assign_215 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:90:18-39"]
+	storage_var_216 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:90:18-31"]
+	subtract_217 [label="subtract\nuint256\ntests/contract_testcases/evm/rubixi.sol:90:18-39"]
+	storage_load_218 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:90:18-39"]
+	storage_var_219 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:90:18-31"]
+	variable_220 [label="variable: _amt\nuint256\ntests/contract_testcases/evm/rubixi.sol:90:35-39"]
+	collectPercentOfFees [label="function collectPercentOfFees\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:93:10-69\nsignature collectPercentOfFees(uint256)\nvisibility public\nmutability nonpayable"]
 	parameters_222 [label="parameters\nuint256 _pcent"]
-	if_223 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:94:18-67"]
-	logical_or [label="logical or\ntests/contract_testcases/ewasm/rubixi.sol:94:22-56"]
-	equal_225 [label="equal\ntests/contract_testcases/ewasm/rubixi.sol:94:22-40"]
-	storage_load_226 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:94:22-35"]
-	storage_var_227 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:94:22-35"]
-	number_literal_228 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/rubixi.sol:94:39-40"]
-	more_229 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:94:44-56"]
-	variable_230 [label="variable: _pcent\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:94:44-50"]
-	number_literal_231 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:94:53-56"]
-	expr_232 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:94:58-66"]
-	builtins_233 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:94:58-64"]
-	var_decl_234 [label="variable decl uint256 feesToCollect\ntests/contract_testcases/ewasm/rubixi.sol:96:18-67"]
-	multiply_235 [label="multiply\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:39-67"]
-	divide_236 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:39-58"]
-	storage_load_237 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:96:39-52"]
-	storage_var_238 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:96:39-52"]
-	number_literal_239 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/rubixi.sol:96:55-58"]
-	variable_240 [label="variable: _pcent\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:96:61-67"]
-	expr_241 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:97:18-67"]
-	builtins_242 [label="builtin PayableTransfer\ntests/contract_testcases/ewasm/rubixi.sol:97:18-67"]
-	cast_243 [label="cast address payable\ntests/contract_testcases/ewasm/rubixi.sol:97:18-34"]
-	storage_load_244 [label="storage load address\ntests/contract_testcases/ewasm/rubixi.sol:97:18-34"]
-	storage_var_245 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:97:26-33"]
-	cast_246 [label="cast uint128\ntests/contract_testcases/ewasm/rubixi.sol:97:44-66"]
-	trunc_247 [label="truncate uint128\ntests/contract_testcases/ewasm/rubixi.sol:97:44-66"]
-	variable_248 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:97:52-65"]
-	expr_249 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:98:18-48"]
-	assign_250 [label="assign\nvoid\ntests/contract_testcases/ewasm/rubixi.sol:98:18-48"]
-	storage_var_251 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:98:18-31"]
-	subtract_252 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:98:18-48"]
-	storage_load_253 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:98:18-48"]
-	storage_var_254 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:98:18-31"]
-	variable_255 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:98:35-48"]
-	changeOwner [label="function changeOwner\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:102:10-63\nsignature changeOwner(address)\nvisibility public\nmutability nonpayable"]
+	if_223 [label="if\ntests/contract_testcases/evm/rubixi.sol:94:18-67"]
+	logical_or [label="logical or\ntests/contract_testcases/evm/rubixi.sol:94:22-56"]
+	equal_225 [label="equal\ntests/contract_testcases/evm/rubixi.sol:94:22-40"]
+	storage_load_226 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:94:22-35"]
+	storage_var_227 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:94:22-35"]
+	number_literal_228 [label="uint256 literal: 0\ntests/contract_testcases/evm/rubixi.sol:94:39-40"]
+	more_229 [label="more\ntests/contract_testcases/evm/rubixi.sol:94:44-56"]
+	variable_230 [label="variable: _pcent\nuint256\ntests/contract_testcases/evm/rubixi.sol:94:44-50"]
+	number_literal_231 [label="uint256 literal: 100\ntests/contract_testcases/evm/rubixi.sol:94:53-56"]
+	expr_232 [label="expression\ntests/contract_testcases/evm/rubixi.sol:94:58-66"]
+	builtins_233 [label="builtin Revert\ntests/contract_testcases/evm/rubixi.sol:94:58-64"]
+	var_decl_234 [label="variable decl uint256 feesToCollect\ntests/contract_testcases/evm/rubixi.sol:96:18-67"]
+	multiply_235 [label="multiply\nuint256\ntests/contract_testcases/evm/rubixi.sol:96:39-67"]
+	divide_236 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:96:39-58"]
+	storage_load_237 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:96:39-52"]
+	storage_var_238 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:96:39-52"]
+	number_literal_239 [label="uint256 literal: 100\ntests/contract_testcases/evm/rubixi.sol:96:55-58"]
+	variable_240 [label="variable: _pcent\nuint256\ntests/contract_testcases/evm/rubixi.sol:96:61-67"]
+	expr_241 [label="expression\ntests/contract_testcases/evm/rubixi.sol:97:18-67"]
+	builtins_242 [label="builtin PayableTransfer\ntests/contract_testcases/evm/rubixi.sol:97:18-67"]
+	cast_243 [label="cast address payable\ntests/contract_testcases/evm/rubixi.sol:97:18-34"]
+	storage_load_244 [label="storage load address\ntests/contract_testcases/evm/rubixi.sol:97:18-34"]
+	storage_var_245 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/evm/rubixi.sol:97:26-33"]
+	cast_246 [label="cast uint128\ntests/contract_testcases/evm/rubixi.sol:97:44-66"]
+	trunc_247 [label="truncate uint128\ntests/contract_testcases/evm/rubixi.sol:97:44-66"]
+	variable_248 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/evm/rubixi.sol:97:52-65"]
+	expr_249 [label="expression\ntests/contract_testcases/evm/rubixi.sol:98:18-48"]
+	assign_250 [label="assign\nvoid\ntests/contract_testcases/evm/rubixi.sol:98:18-48"]
+	storage_var_251 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:98:18-31"]
+	subtract_252 [label="subtract\nuint256\ntests/contract_testcases/evm/rubixi.sol:98:18-48"]
+	storage_load_253 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:98:18-48"]
+	storage_var_254 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:98:18-31"]
+	variable_255 [label="variable: feesToCollect\nuint256\ntests/contract_testcases/evm/rubixi.sol:98:35-48"]
+	changeOwner [label="function changeOwner\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:102:10-63\nsignature changeOwner(address)\nvisibility public\nmutability nonpayable"]
 	parameters_257 [label="parameters\naddress _owner"]
-	expr_258 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:103:18-34"]
-	assign_259 [label="assign\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:103:18-25"]
-	storage_var_260 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/ewasm/rubixi.sol:103:18-25"]
-	variable_261 [label="variable: _owner\naddress\ntests/contract_testcases/ewasm/rubixi.sol:103:28-34"]
-	changeMultiplier [label="function changeMultiplier\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:106:10-64\nsignature changeMultiplier(uint256)\nvisibility public\nmutability nonpayable"]
+	expr_258 [label="expression\ntests/contract_testcases/evm/rubixi.sol:103:18-34"]
+	assign_259 [label="assign\naddress storage\ntests/contract_testcases/evm/rubixi.sol:103:18-25"]
+	storage_var_260 [label="storage variable\nRubixi.creator\naddress storage\ntests/contract_testcases/evm/rubixi.sol:103:18-25"]
+	variable_261 [label="variable: _owner\naddress\ntests/contract_testcases/evm/rubixi.sol:103:28-34"]
+	changeMultiplier [label="function changeMultiplier\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:106:10-64\nsignature changeMultiplier(uint256)\nvisibility public\nmutability nonpayable"]
 	parameters_263 [label="parameters\nuint256 _mult"]
-	if_264 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:107:18-59"]
-	logical_or_265 [label="logical or\ntests/contract_testcases/ewasm/rubixi.sol:107:22-48"]
-	more_266 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:107:22-33"]
-	variable_267 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:107:22-27"]
-	number_literal_268 [label="uint256 literal: 300\ntests/contract_testcases/ewasm/rubixi.sol:107:30-33"]
-	less_269 [label="less\ntests/contract_testcases/ewasm/rubixi.sol:107:37-48"]
-	variable_270 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:107:37-42"]
-	number_literal_271 [label="uint256 literal: 120\ntests/contract_testcases/ewasm/rubixi.sol:107:45-48"]
-	expr_272 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:107:50-58"]
-	builtins_273 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:107:50-56"]
-	expr_274 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:109:18-43"]
-	assign_275 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:109:18-35"]
-	storage_var_276 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:109:18-35"]
-	variable_277 [label="variable: _mult\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:109:38-43"]
-	changeFeePercentage [label="function changeFeePercentage\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:112:10-66\nsignature changeFeePercentage(uint256)\nvisibility public\nmutability nonpayable"]
+	if_264 [label="if\ntests/contract_testcases/evm/rubixi.sol:107:18-59"]
+	logical_or_265 [label="logical or\ntests/contract_testcases/evm/rubixi.sol:107:22-48"]
+	more_266 [label="more\ntests/contract_testcases/evm/rubixi.sol:107:22-33"]
+	variable_267 [label="variable: _mult\nuint256\ntests/contract_testcases/evm/rubixi.sol:107:22-27"]
+	number_literal_268 [label="uint256 literal: 300\ntests/contract_testcases/evm/rubixi.sol:107:30-33"]
+	less_269 [label="less\ntests/contract_testcases/evm/rubixi.sol:107:37-48"]
+	variable_270 [label="variable: _mult\nuint256\ntests/contract_testcases/evm/rubixi.sol:107:37-42"]
+	number_literal_271 [label="uint256 literal: 120\ntests/contract_testcases/evm/rubixi.sol:107:45-48"]
+	expr_272 [label="expression\ntests/contract_testcases/evm/rubixi.sol:107:50-58"]
+	builtins_273 [label="builtin Revert\ntests/contract_testcases/evm/rubixi.sol:107:50-56"]
+	expr_274 [label="expression\ntests/contract_testcases/evm/rubixi.sol:109:18-43"]
+	assign_275 [label="assign\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:109:18-35"]
+	storage_var_276 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:109:18-35"]
+	variable_277 [label="variable: _mult\nuint256\ntests/contract_testcases/evm/rubixi.sol:109:38-43"]
+	changeFeePercentage [label="function changeFeePercentage\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:112:10-66\nsignature changeFeePercentage(uint256)\nvisibility public\nmutability nonpayable"]
 	parameters_279 [label="parameters\nuint256 _fee"]
-	if_280 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:113:18-42"]
-	more_281 [label="more\ntests/contract_testcases/ewasm/rubixi.sol:113:22-31"]
-	variable_282 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:113:22-26"]
-	number_literal_283 [label="uint256 literal: 10\ntests/contract_testcases/ewasm/rubixi.sol:113:29-31"]
-	expr_284 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:113:33-41"]
-	builtins_285 [label="builtin Revert\ntests/contract_testcases/ewasm/rubixi.sol:113:33-39"]
-	expr_286 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:115:18-35"]
-	assign_287 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:115:18-28"]
-	storage_var_288 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:115:18-28"]
-	variable_289 [label="variable: _fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:115:31-35"]
-	currentMultiplier [label="function currentMultiplier\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:119:10-95\nsignature currentMultiplier()\nvisibility public\nmutability view"]
+	if_280 [label="if\ntests/contract_testcases/evm/rubixi.sol:113:18-42"]
+	more_281 [label="more\ntests/contract_testcases/evm/rubixi.sol:113:22-31"]
+	variable_282 [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:113:22-26"]
+	number_literal_283 [label="uint256 literal: 10\ntests/contract_testcases/evm/rubixi.sol:113:29-31"]
+	expr_284 [label="expression\ntests/contract_testcases/evm/rubixi.sol:113:33-41"]
+	builtins_285 [label="builtin Revert\ntests/contract_testcases/evm/rubixi.sol:113:33-39"]
+	expr_286 [label="expression\ntests/contract_testcases/evm/rubixi.sol:115:18-35"]
+	assign_287 [label="assign\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:115:18-28"]
+	storage_var_288 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:115:18-28"]
+	variable_289 [label="variable: _fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:115:31-35"]
+	currentMultiplier [label="function currentMultiplier\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:119:10-95\nsignature currentMultiplier()\nvisibility public\nmutability view"]
 	returns [label="returns\nuint256 multiplier\nstring info"]
-	expr_292 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:120:18-48"]
-	assign_293 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:120:18-48"]
-	variable_294 [label="variable: multiplier\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:120:18-28"]
-	storage_load_295 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:120:31-48"]
-	storage_var_296 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:120:31-48"]
-	expr_297 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:121:18-314"]
-	assign_298 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:121:18-314"]
-	variable_299 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:121:18-22"]
-	alloc_array [label="alloc array string\ninitializer: 54686973206d756c7469706c696572206170706c69657320746f20796f7520617320736f6f6e206173207472616e73616374696f6e2069732072656365697665642c206d6179206265206c6f776572656420746f2068617374656e207061796f757473206f7220696e63726561736564206966207061796f75747320617265206661737420656e6f7567682e2044756520746f206e6f20666c6f6174206f7220646563696d616c732c206d756c7469706c696572206973207831303020666f722061206672616374696f6e616c206d756c7469706c69657220652e672e203235302069732061637475616c6c79206120322e3578206d756c7469706c6965722e20436170706564206174203378206d617820616e6420312e3278206d696e2e\ntests/contract_testcases/ewasm/rubixi.sol:121:25-314"]
-	number_literal_301 [label="uint32 literal: 287\ntests/contract_testcases/ewasm/rubixi.sol:121:25-314"]
-	currentFeePercentage [label="function currentFeePercentage\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:124:10-91\nsignature currentFeePercentage()\nvisibility public\nmutability view"]
+	expr_292 [label="expression\ntests/contract_testcases/evm/rubixi.sol:120:18-48"]
+	assign_293 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:120:18-48"]
+	variable_294 [label="variable: multiplier\nuint256\ntests/contract_testcases/evm/rubixi.sol:120:18-28"]
+	storage_load_295 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:120:31-48"]
+	storage_var_296 [label="storage variable\nRubixi.pyramidMultiplier\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:120:31-48"]
+	expr_297 [label="expression\ntests/contract_testcases/evm/rubixi.sol:121:18-314"]
+	assign_298 [label="assign\nstring\ntests/contract_testcases/evm/rubixi.sol:121:18-314"]
+	variable_299 [label="variable: info\nstring\ntests/contract_testcases/evm/rubixi.sol:121:18-22"]
+	alloc_array [label="alloc array string\ninitializer: 54686973206d756c7469706c696572206170706c69657320746f20796f7520617320736f6f6e206173207472616e73616374696f6e2069732072656365697665642c206d6179206265206c6f776572656420746f2068617374656e207061796f757473206f7220696e63726561736564206966207061796f75747320617265206661737420656e6f7567682e2044756520746f206e6f20666c6f6174206f7220646563696d616c732c206d756c7469706c696572206973207831303020666f722061206672616374696f6e616c206d756c7469706c69657220652e672e203235302069732061637475616c6c79206120322e3578206d756c7469706c6965722e20436170706564206174203378206d617820616e6420312e3278206d696e2e\ntests/contract_testcases/evm/rubixi.sol:121:25-314"]
+	number_literal_301 [label="uint32 literal: 287\ntests/contract_testcases/evm/rubixi.sol:121:25-314"]
+	currentFeePercentage [label="function currentFeePercentage\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:124:10-91\nsignature currentFeePercentage()\nvisibility public\nmutability view"]
 	returns_303 [label="returns\nuint256 fee\nstring info"]
-	expr_304 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:125:18-34"]
-	assign_305 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:125:18-34"]
-	variable_306 [label="variable: fee\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:125:18-21"]
-	storage_load_307 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:125:24-34"]
-	storage_var_308 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:125:24-34"]
-	expr_309 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:126:18-159"]
-	assign_310 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:126:18-159"]
-	variable_311 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:126:18-22"]
-	alloc_array_312 [label="alloc array string\ninitializer: 53686f776e20696e202520666f726d2e204665652069732068616c766564283530252920666f7220616d6f756e747320657175616c206f722067726561746572207468616e203530206574686572732e2028466565206d6179206368616e67652c206275742069732063617070656420746f2061206d6178696d756d206f662031302529\ntests/contract_testcases/ewasm/rubixi.sol:126:25-159"]
-	number_literal_313 [label="uint32 literal: 132\ntests/contract_testcases/ewasm/rubixi.sol:126:25-159"]
-	currentPyramidBalanceApproximately [label="function currentPyramidBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:129:10-116\nsignature currentPyramidBalanceApproximately()\nvisibility public\nmutability view"]
+	expr_304 [label="expression\ntests/contract_testcases/evm/rubixi.sol:125:18-34"]
+	assign_305 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:125:18-34"]
+	variable_306 [label="variable: fee\nuint256\ntests/contract_testcases/evm/rubixi.sol:125:18-21"]
+	storage_load_307 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:125:24-34"]
+	storage_var_308 [label="storage variable\nRubixi.feePercent\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:125:24-34"]
+	expr_309 [label="expression\ntests/contract_testcases/evm/rubixi.sol:126:18-159"]
+	assign_310 [label="assign\nstring\ntests/contract_testcases/evm/rubixi.sol:126:18-159"]
+	variable_311 [label="variable: info\nstring\ntests/contract_testcases/evm/rubixi.sol:126:18-22"]
+	alloc_array_312 [label="alloc array string\ninitializer: 53686f776e20696e202520666f726d2e204665652069732068616c766564283530252920666f7220616d6f756e747320657175616c206f722067726561746572207468616e203530206574686572732e2028466565206d6179206368616e67652c206275742069732063617070656420746f2061206d6178696d756d206f662031302529\ntests/contract_testcases/evm/rubixi.sol:126:25-159"]
+	number_literal_313 [label="uint32 literal: 132\ntests/contract_testcases/evm/rubixi.sol:126:25-159"]
+	currentPyramidBalanceApproximately [label="function currentPyramidBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:129:10-116\nsignature currentPyramidBalanceApproximately()\nvisibility public\nmutability view"]
 	returns_315 [label="returns\nuint256 pyramidBalance\nstring info"]
-	expr_316 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:130:18-52"]
-	assign_317 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:18-52"]
-	variable_318 [label="variable: pyramidBalance\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:18-32"]
-	divide_319 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:130:35-52"]
-	storage_load_320 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:130:35-42"]
-	storage_var_321 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:130:35-42"]
-	number_literal_322 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:130:45-52"]
-	expr_323 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:131:18-229"]
-	assign_324 [label="assign\nstring\ntests/contract_testcases/ewasm/rubixi.sol:131:18-229"]
-	variable_325 [label="variable: info\nstring\ntests/contract_testcases/ewasm/rubixi.sol:131:18-22"]
-	alloc_array_326 [label="alloc array string\ninitializer: 416c6c2062616c616e63652076616c75657320617265206d6561737572656420696e204574686572732c206e6f746520746861742064756520746f206e6f20646563696d616c20706c6163696e672c2074686573652076616c7565732073686f7720757020617320696e746567657273206f6e6c792c2077697468696e2074686520636f6e747261637420697473656c6620796f752077696c6c206765742074686520657861637420646563696d616c2076616c756520796f752061726520737570706f73656420746f\ntests/contract_testcases/ewasm/rubixi.sol:131:25-229"]
-	number_literal_327 [label="uint32 literal: 202\ntests/contract_testcases/ewasm/rubixi.sol:131:25-229"]
-	nextPayoutWhenPyramidBalanceTotalsApproximately [label="function nextPayoutWhenPyramidBalanceTotalsApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:134:10-108\nsignature nextPayoutWhenPyramidBalanceTotalsApproximately()\nvisibility public\nmutability view"]
+	expr_316 [label="expression\ntests/contract_testcases/evm/rubixi.sol:130:18-52"]
+	assign_317 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:130:18-52"]
+	variable_318 [label="variable: pyramidBalance\nuint256\ntests/contract_testcases/evm/rubixi.sol:130:18-32"]
+	divide_319 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:130:35-52"]
+	storage_load_320 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:130:35-42"]
+	storage_var_321 [label="storage variable\nRubixi.balance\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:130:35-42"]
+	number_literal_322 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/evm/rubixi.sol:130:45-52"]
+	expr_323 [label="expression\ntests/contract_testcases/evm/rubixi.sol:131:18-229"]
+	assign_324 [label="assign\nstring\ntests/contract_testcases/evm/rubixi.sol:131:18-229"]
+	variable_325 [label="variable: info\nstring\ntests/contract_testcases/evm/rubixi.sol:131:18-22"]
+	alloc_array_326 [label="alloc array string\ninitializer: 416c6c2062616c616e63652076616c75657320617265206d6561737572656420696e204574686572732c206e6f746520746861742064756520746f206e6f20646563696d616c20706c6163696e672c2074686573652076616c7565732073686f7720757020617320696e746567657273206f6e6c792c2077697468696e2074686520636f6e747261637420697473656c6620796f752077696c6c206765742074686520657861637420646563696d616c2076616c756520796f752061726520737570706f73656420746f\ntests/contract_testcases/evm/rubixi.sol:131:25-229"]
+	number_literal_327 [label="uint32 literal: 202\ntests/contract_testcases/evm/rubixi.sol:131:25-229"]
+	nextPayoutWhenPyramidBalanceTotalsApproximately [label="function nextPayoutWhenPyramidBalanceTotalsApproximately\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:134:10-108\nsignature nextPayoutWhenPyramidBalanceTotalsApproximately()\nvisibility public\nmutability view"]
 	returns_329 [label="returns\nuint256 balancePayout"]
-	expr_330 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:135:18-76"]
-	assign_331 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:18-76"]
-	variable_332 [label="variable: balancePayout\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:18-31"]
-	divide_333 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:135:34-76"]
-	storage_load_334 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:135:34-66"]
-	structmember_335 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:135:60-66"]
-	subscript_336 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:135:34-59"]
-	storage_var_337 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:135:34-46"]
-	storage_load_338 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:135:47-58"]
-	storage_var_339 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:135:47-58"]
-	number_literal_340 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:135:69-76"]
-	feesSeperateFromBalanceApproximately [label="function feesSeperateFromBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:138:10-88\nsignature feesSeperateFromBalanceApproximately()\nvisibility public\nmutability view"]
+	expr_330 [label="expression\ntests/contract_testcases/evm/rubixi.sol:135:18-76"]
+	assign_331 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:135:18-76"]
+	variable_332 [label="variable: balancePayout\nuint256\ntests/contract_testcases/evm/rubixi.sol:135:18-31"]
+	divide_333 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:135:34-76"]
+	storage_load_334 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:135:34-66"]
+	structmember_335 [label="struct member #1 uint256 storage\ntests/contract_testcases/evm/rubixi.sol:135:60-66"]
+	subscript_336 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:135:34-59"]
+	storage_var_337 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:135:34-46"]
+	storage_load_338 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:135:47-58"]
+	storage_var_339 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:135:47-58"]
+	number_literal_340 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/evm/rubixi.sol:135:69-76"]
+	feesSeperateFromBalanceApproximately [label="function feesSeperateFromBalanceApproximately\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:138:10-88\nsignature feesSeperateFromBalanceApproximately()\nvisibility public\nmutability view"]
 	returns_342 [label="returns\nuint256 fees"]
-	expr_343 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:139:18-48"]
-	assign_344 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:18-48"]
-	variable_345 [label="variable: fees\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:18-22"]
-	divide_346 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:139:25-48"]
-	storage_load_347 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:139:25-38"]
-	storage_var_348 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:139:25-38"]
-	number_literal_349 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:139:41-48"]
-	totalParticipants [label="function totalParticipants\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:142:10-70\nsignature totalParticipants()\nvisibility public\nmutability view"]
+	expr_343 [label="expression\ntests/contract_testcases/evm/rubixi.sol:139:18-48"]
+	assign_344 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:139:18-48"]
+	variable_345 [label="variable: fees\nuint256\ntests/contract_testcases/evm/rubixi.sol:139:18-22"]
+	divide_346 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:139:25-48"]
+	storage_load_347 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:139:25-38"]
+	storage_var_348 [label="storage variable\nRubixi.collectedFees\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:139:25-38"]
+	number_literal_349 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/evm/rubixi.sol:139:41-48"]
+	totalParticipants [label="function totalParticipants\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:142:10-70\nsignature totalParticipants()\nvisibility public\nmutability view"]
 	returns_351 [label="returns\nuint256 count"]
-	expr_352 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:143:18-45"]
-	assign_353 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:143:18-45"]
-	variable_354 [label="variable: count\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:143:18-23"]
-	array_length_355 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:143:39-45"]
-	storage_var_356 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:143:26-38"]
-	numberOfParticipantsWaitingForPayout [label="function numberOfParticipantsWaitingForPayout\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:146:10-89\nsignature numberOfParticipantsWaitingForPayout()\nvisibility public\nmutability view"]
+	expr_352 [label="expression\ntests/contract_testcases/evm/rubixi.sol:143:18-45"]
+	assign_353 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:143:18-45"]
+	variable_354 [label="variable: count\nuint256\ntests/contract_testcases/evm/rubixi.sol:143:18-23"]
+	array_length_355 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/evm/rubixi.sol:143:39-45"]
+	storage_var_356 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:143:26-38"]
+	numberOfParticipantsWaitingForPayout [label="function numberOfParticipantsWaitingForPayout\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:146:10-89\nsignature numberOfParticipantsWaitingForPayout()\nvisibility public\nmutability view"]
 	returns_358 [label="returns\nuint256 count"]
-	expr_359 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:147:18-59"]
-	assign_360 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:18-59"]
-	variable_361 [label="variable: count\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:18-23"]
-	subtract_362 [label="subtract\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:147:26-59"]
-	array_length_363 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:147:39-45"]
-	storage_var_364 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:147:26-38"]
-	storage_load_365 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:147:48-59"]
-	storage_var_366 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:147:48-59"]
-	participantDetails [label="function participantDetails\ncontract: Rubixi\ntests/contract_testcases/ewasm/rubixi.sol:150:10-108\nsignature participantDetails(uint256)\nvisibility public\nmutability view"]
+	expr_359 [label="expression\ntests/contract_testcases/evm/rubixi.sol:147:18-59"]
+	assign_360 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:147:18-59"]
+	variable_361 [label="variable: count\nuint256\ntests/contract_testcases/evm/rubixi.sol:147:18-23"]
+	subtract_362 [label="subtract\nuint256\ntests/contract_testcases/evm/rubixi.sol:147:26-59"]
+	array_length_363 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/evm/rubixi.sol:147:39-45"]
+	storage_var_364 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:147:26-38"]
+	storage_load_365 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:147:48-59"]
+	storage_var_366 [label="storage variable\nRubixi.payoutOrder\nuint256 storage\ntests/contract_testcases/evm/rubixi.sol:147:48-59"]
+	participantDetails [label="function participantDetails\ncontract: Rubixi\ntests/contract_testcases/evm/rubixi.sol:150:10-108\nsignature participantDetails(uint256)\nvisibility public\nmutability view"]
 	parameters_368 [label="parameters\nuint256 orderInPyramid"]
 	returns_369 [label="returns\naddress Address\nuint256 Payout"]
-	if_370 [label="if\ntests/contract_testcases/ewasm/rubixi.sol:151:18-154:19"]
-	less_equal [label="less equal\ntests/contract_testcases/ewasm/rubixi.sol:151:22-59"]
-	variable_372 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:151:22-36"]
-	array_length_373 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/ewasm/rubixi.sol:151:53-59"]
-	storage_var_374 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:151:40-52"]
-	expr_375 [label="expression\ntests/contract_testcases/ewasm/rubixi.sol:153:26-80"]
-	assign_376 [label="assign\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:26-80"]
-	variable_377 [label="variable: Payout\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:26-32"]
-	divide_378 [label="divide\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:35-80"]
-	storage_load_379 [label="storage load uint256\ntests/contract_testcases/ewasm/rubixi.sol:153:35-70"]
-	structmember_380 [label="struct member #1 uint256 storage\ntests/contract_testcases/ewasm/rubixi.sol:153:64-70"]
-	subscript_381 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:153:35-63"]
-	storage_var_382 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/ewasm/rubixi.sol:153:35-47"]
-	variable_383 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/ewasm/rubixi.sol:153:48-62"]
-	number_literal_384 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/ewasm/rubixi.sol:153:73-80"]
-	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/ewasm/rubixi.sol:2:2-25"]
-	diagnostic_387 [label="found contract 'Rubixi'\nlevel Debug\ntests/contract_testcases/ewasm/rubixi.sol:4:2-156:3"]
-	diagnostic_388 [label="local variable 'payoutToSend' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/ewasm/rubixi.sol:67:31-43"]
-	diagnostic_389 [label="return variable 'Address' has never been assigned\nlevel Warning\ntests/contract_testcases/ewasm/rubixi.sol:150:87-94"]
+	if_370 [label="if\ntests/contract_testcases/evm/rubixi.sol:151:18-154:19"]
+	less_equal [label="less equal\ntests/contract_testcases/evm/rubixi.sol:151:22-59"]
+	variable_372 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/evm/rubixi.sol:151:22-36"]
+	array_length_373 [label="array length uint256\nelement struct Rubixi.Participant\ntests/contract_testcases/evm/rubixi.sol:151:53-59"]
+	storage_var_374 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:151:40-52"]
+	expr_375 [label="expression\ntests/contract_testcases/evm/rubixi.sol:153:26-80"]
+	assign_376 [label="assign\nuint256\ntests/contract_testcases/evm/rubixi.sol:153:26-80"]
+	variable_377 [label="variable: Payout\nuint256\ntests/contract_testcases/evm/rubixi.sol:153:26-32"]
+	divide_378 [label="divide\nuint256\ntests/contract_testcases/evm/rubixi.sol:153:35-80"]
+	storage_load_379 [label="storage load uint256\ntests/contract_testcases/evm/rubixi.sol:153:35-70"]
+	structmember_380 [label="struct member #1 uint256 storage\ntests/contract_testcases/evm/rubixi.sol:153:64-70"]
+	subscript_381 [label="subscript struct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:153:35-63"]
+	storage_var_382 [label="storage variable\nRubixi.participants\nstruct Rubixi.Participant[] storage\ntests/contract_testcases/evm/rubixi.sol:153:35-47"]
+	variable_383 [label="variable: orderInPyramid\nuint256\ntests/contract_testcases/evm/rubixi.sol:153:48-62"]
+	number_literal_384 [label="uint256 literal: 1000000000000000000\ntests/contract_testcases/evm/rubixi.sol:153:73-80"]
+	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/evm/rubixi.sol:2:2-25"]
+	diagnostic_387 [label="found contract 'Rubixi'\nlevel Debug\ntests/contract_testcases/evm/rubixi.sol:4:2-156:3"]
+	diagnostic_388 [label="local variable 'payoutToSend' has been assigned, but never read\nlevel Warning\ntests/contract_testcases/evm/rubixi.sol:67:31-43"]
+	diagnostic_389 [label="return variable 'Address' has never been assigned\nlevel Warning\ntests/contract_testcases/evm/rubixi.sol:150:87-94"]
 	structs -> Participant
 	contracts -> contract
 	contract -> var [label="variable"]

+ 0 - 0
tests/contract_testcases/ewasm/rubixi.sol → tests/contract_testcases/evm/rubixi.sol


+ 16 - 16
tests/contract_testcases/ewasm/selector_override.dot → tests/contract_testcases/evm/selector_override.dot

@@ -1,19 +1,19 @@
-strict digraph "tests/contract_testcases/ewasm/selector_override.sol" {
-	contract [label="contract selector\ntests/contract_testcases/ewasm/selector_override.sol:1:1-8:2"]
-	node_2 [label="constructor \ncontract: selector\ntests/contract_testcases/ewasm/selector_override.sol:2:2-34\nsignature ()\nvisibility public\nmutability nonpayable"]
-	m [label="modifier m\ncontract: selector\ntests/contract_testcases/ewasm/selector_override.sol:3:2-29\nmutability nonpayable"]
-	underscore [label="undersore\ntests/contract_testcases/ewasm/selector_override.sol:3:31-32"]
-	node_5 [label="receive \ncontract: selector\ntests/contract_testcases/ewasm/selector_override.sol:4:2-44\nmutability payable"]
-	node_6 [label="fallback \ncontract: selector\ntests/contract_testcases/ewasm/selector_override.sol:5:2-39\nmutability nonpayable"]
-	i [label="function i\ncontract: selector\ntests/contract_testcases/ewasm/selector_override.sol:6:2-45\nsignature i()\nvisibility internal\nmutability nonpayable"]
-	p [label="function p\ncontract: selector\ntests/contract_testcases/ewasm/selector_override.sol:7:2-44\nsignature p()\nvisibility private\nmutability nonpayable"]
-	diagnostic [label="found contract 'selector'\nlevel Debug\ntests/contract_testcases/ewasm/selector_override.sol:1:1-8:2"]
-	diagnostic_11 [label="overriding selector not permitted on constructor\nlevel Error\ntests/contract_testcases/ewasm/selector_override.sol:2:25-34"]
-	diagnostic_12 [label="overriding selector not permitted on modifier\nlevel Error\ntests/contract_testcases/ewasm/selector_override.sol:3:24-29"]
-	diagnostic_13 [label="overriding selector not permitted on receive\nlevel Error\ntests/contract_testcases/ewasm/selector_override.sol:4:38-44"]
-	diagnostic_14 [label="overriding selector not permitted on fallback\nlevel Error\ntests/contract_testcases/ewasm/selector_override.sol:5:31-39"]
-	diagnostic_15 [label="overriding selector only permitted on 'public' or 'external' function, not 'internal'\nlevel Error\ntests/contract_testcases/ewasm/selector_override.sol:6:35-45"]
-	diagnostic_16 [label="overriding selector only permitted on 'public' or 'external' function, not 'private'\nlevel Error\ntests/contract_testcases/ewasm/selector_override.sol:7:34-44"]
+strict digraph "tests/contract_testcases/evm/selector_override.sol" {
+	contract [label="contract selector\ntests/contract_testcases/evm/selector_override.sol:1:1-8:2"]
+	node_2 [label="constructor \ncontract: selector\ntests/contract_testcases/evm/selector_override.sol:2:2-34\nsignature ()\nvisibility public\nmutability nonpayable"]
+	m [label="modifier m\ncontract: selector\ntests/contract_testcases/evm/selector_override.sol:3:2-29\nmutability nonpayable"]
+	underscore [label="undersore\ntests/contract_testcases/evm/selector_override.sol:3:31-32"]
+	node_5 [label="receive \ncontract: selector\ntests/contract_testcases/evm/selector_override.sol:4:2-44\nmutability payable"]
+	node_6 [label="fallback \ncontract: selector\ntests/contract_testcases/evm/selector_override.sol:5:2-39\nmutability nonpayable"]
+	i [label="function i\ncontract: selector\ntests/contract_testcases/evm/selector_override.sol:6:2-45\nsignature i()\nvisibility internal\nmutability nonpayable"]
+	p [label="function p\ncontract: selector\ntests/contract_testcases/evm/selector_override.sol:7:2-44\nsignature p()\nvisibility private\nmutability nonpayable"]
+	diagnostic [label="found contract 'selector'\nlevel Debug\ntests/contract_testcases/evm/selector_override.sol:1:1-8:2"]
+	diagnostic_11 [label="overriding selector not permitted on constructor\nlevel Error\ntests/contract_testcases/evm/selector_override.sol:2:25-34"]
+	diagnostic_12 [label="overriding selector not permitted on modifier\nlevel Error\ntests/contract_testcases/evm/selector_override.sol:3:24-29"]
+	diagnostic_13 [label="overriding selector not permitted on receive\nlevel Error\ntests/contract_testcases/evm/selector_override.sol:4:38-44"]
+	diagnostic_14 [label="overriding selector not permitted on fallback\nlevel Error\ntests/contract_testcases/evm/selector_override.sol:5:31-39"]
+	diagnostic_15 [label="overriding selector only permitted on 'public' or 'external' function, not 'internal'\nlevel Error\ntests/contract_testcases/evm/selector_override.sol:6:35-45"]
+	diagnostic_16 [label="overriding selector only permitted on 'public' or 'external' function, not 'private'\nlevel Error\ntests/contract_testcases/evm/selector_override.sol:7:34-44"]
 	contracts -> contract
 	contract -> node_2 [label="constructor"]
 	contract -> m [label="modifier"]

+ 0 - 0
tests/contract_testcases/ewasm/selector_override.sol → tests/contract_testcases/evm/selector_override.sol


+ 136 - 136
tests/contract_testcases/ewasm/standalone_call.dot → tests/contract_testcases/evm/standalone_call.dot

@@ -1,145 +1,145 @@
-strict digraph "tests/contract_testcases/ewasm/standalone_call.sol" {
-	tts [label="name:tts\ncontract: BABYLINK\ntests/contract_testcases/ewasm/standalone_call.sol:8:12-15\nfield name:a ty:int256\nfield name:b ty:int256"]
-	contract [label="contract foo\ntests/contract_testcases/ewasm/standalone_call.sol:1:1-5:2"]
-	bar [label="function bar\ncontract: foo\ntests/contract_testcases/ewasm/standalone_call.sol:2:5-50\nsignature bar()\nvisibility public\nmutability pure"]
+strict digraph "tests/contract_testcases/evm/standalone_call.sol" {
+	tts [label="name:tts\ncontract: BABYLINK\ntests/contract_testcases/evm/standalone_call.sol:8:12-15\nfield name:a ty:int256\nfield name:b ty:int256"]
+	contract [label="contract foo\ntests/contract_testcases/evm/standalone_call.sol:1:1-5:2"]
+	bar [label="function bar\ncontract: foo\ntests/contract_testcases/evm/standalone_call.sol:2:5-50\nsignature bar()\nvisibility public\nmutability pure"]
 	returns [label="returns\nint256 \nint256 "]
-	return [label="return\ntests/contract_testcases/ewasm/standalone_call.sol:3:9-22"]
-	list [label="list\ntests/contract_testcases/ewasm/standalone_call.sol:3:9-22"]
-	number_literal [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:3:17-18"]
-	number_literal_9 [label="int256 literal: 2\ntests/contract_testcases/ewasm/standalone_call.sol:3:20-21"]
-	contract_10 [label="contract BABYLINK\ntests/contract_testcases/ewasm/standalone_call.sol:6:1-58:2"]
-	multipleRetuns [label="function multipleRetuns\ncontract: BABYLINK\ntests/contract_testcases/ewasm/standalone_call.sol:13:5-71\nsignature multipleRetuns(int256)\nvisibility public\nmutability pure"]
+	return [label="return\ntests/contract_testcases/evm/standalone_call.sol:3:9-22"]
+	list [label="list\ntests/contract_testcases/evm/standalone_call.sol:3:9-22"]
+	number_literal [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:3:17-18"]
+	number_literal_9 [label="int256 literal: 2\ntests/contract_testcases/evm/standalone_call.sol:3:20-21"]
+	contract_10 [label="contract BABYLINK\ntests/contract_testcases/evm/standalone_call.sol:6:1-58:2"]
+	multipleRetuns [label="function multipleRetuns\ncontract: BABYLINK\ntests/contract_testcases/evm/standalone_call.sol:13:5-71\nsignature multipleRetuns(int256)\nvisibility public\nmutability pure"]
 	parameters [label="parameters\nint256 c"]
 	returns_13 [label="returns\nint256 \nint256 \nint256 "]
-	return_14 [label="return\ntests/contract_testcases/ewasm/standalone_call.sol:14:9-29"]
-	list_15 [label="list\ntests/contract_testcases/ewasm/standalone_call.sol:14:9-29"]
-	number_literal_16 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:14:17-18"]
-	add [label="add\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:14:20-25"]
-	variable [label="variable: c\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:14:20-21"]
-	number_literal_19 [label="int256 literal: 2\ntests/contract_testcases/ewasm/standalone_call.sol:14:24-25"]
-	number_literal_20 [label="int256 literal: 3\ntests/contract_testcases/ewasm/standalone_call.sol:14:27-28"]
-	singleReturn [label="function singleReturn\ncontract: BABYLINK\ntests/contract_testcases/ewasm/standalone_call.sol:17:5-55\nsignature singleReturn()\nvisibility private\nmutability pure"]
+	return_14 [label="return\ntests/contract_testcases/evm/standalone_call.sol:14:9-29"]
+	list_15 [label="list\ntests/contract_testcases/evm/standalone_call.sol:14:9-29"]
+	number_literal_16 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:14:17-18"]
+	add [label="add\nint256\ntests/contract_testcases/evm/standalone_call.sol:14:20-25"]
+	variable [label="variable: c\nint256\ntests/contract_testcases/evm/standalone_call.sol:14:20-21"]
+	number_literal_19 [label="int256 literal: 2\ntests/contract_testcases/evm/standalone_call.sol:14:24-25"]
+	number_literal_20 [label="int256 literal: 3\ntests/contract_testcases/evm/standalone_call.sol:14:27-28"]
+	singleReturn [label="function singleReturn\ncontract: BABYLINK\ntests/contract_testcases/evm/standalone_call.sol:17:5-55\nsignature singleReturn()\nvisibility private\nmutability pure"]
 	returns_22 [label="returns\nint256 "]
-	return_23 [label="return\ntests/contract_testcases/ewasm/standalone_call.sol:18:9-17"]
-	number_literal_24 [label="int256 literal: 3\ntests/contract_testcases/ewasm/standalone_call.sol:18:16-17"]
-	returnBool [label="function returnBool\ncontract: BABYLINK\ntests/contract_testcases/ewasm/standalone_call.sol:21:5-54\nsignature returnBool()\nvisibility private\nmutability pure"]
+	return_23 [label="return\ntests/contract_testcases/evm/standalone_call.sol:18:9-17"]
+	number_literal_24 [label="int256 literal: 3\ntests/contract_testcases/evm/standalone_call.sol:18:16-17"]
+	returnBool [label="function returnBool\ncontract: BABYLINK\ntests/contract_testcases/evm/standalone_call.sol:21:5-54\nsignature returnBool()\nvisibility private\nmutability pure"]
 	returns_26 [label="returns\nbool "]
-	return_27 [label="return\ntests/contract_testcases/ewasm/standalone_call.sol:22:9-20"]
-	bool_literal [label="bool literal: true\ntests/contract_testcases/ewasm/standalone_call.sol:22:16-20"]
-	testing [label="function testing\ncontract: BABYLINK\ntests/contract_testcases/ewasm/standalone_call.sol:25:5-44\nsignature testing()\nvisibility public\nmutability nonpayable"]
+	return_27 [label="return\ntests/contract_testcases/evm/standalone_call.sol:22:9-20"]
+	bool_literal [label="bool literal: true\ntests/contract_testcases/evm/standalone_call.sol:22:16-20"]
+	testing [label="function testing\ncontract: BABYLINK\ntests/contract_testcases/evm/standalone_call.sol:25:5-44\nsignature testing()\nvisibility public\nmutability nonpayable"]
 	returns_30 [label="returns\nint256 "]
-	expr [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:26:9-26"]
-	call_internal_function [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:26:9-26"]
-	internal_function [label="function(int256) internal pure returns (void)\nBABYLINK.multipleRetuns\ntests/contract_testcases/ewasm/standalone_call.sol:26:9-26"]
-	number_literal_34 [label="int256 literal: 3\ntests/contract_testcases/ewasm/standalone_call.sol:26:24-25"]
-	var_decl [label="variable decl int256 b\ntests/contract_testcases/ewasm/standalone_call.sol:27:9-18"]
-	number_literal_36 [label="int256 literal: 5\ntests/contract_testcases/ewasm/standalone_call.sol:27:17-18"]
-	expr_37 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:28:9-31"]
-	call_internal_function_38 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:28:9-31"]
-	internal_function_39 [label="function(int256) internal pure returns (void)\nBABYLINK.multipleRetuns\ntests/contract_testcases/ewasm/standalone_call.sol:28:9-31"]
-	number_literal_40 [label="int256 literal: 9\ntests/contract_testcases/ewasm/standalone_call.sol:28:28-29"]
-	expr_41 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:29:9-27"]
-	add_42 [label="add\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:29:9-27"]
-	number_literal_43 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:29:9-10"]
-	call_internal_function_44 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:29:13-27"]
-	internal_function_45 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:29:13-27"]
-	expr_46 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:30:9-27"]
-	subtract [label="subtract\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:30:9-27"]
-	number_literal_48 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:30:9-10"]
-	call_internal_function_49 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:30:13-27"]
-	internal_function_50 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:30:13-27"]
-	expr_51 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:31:9-27"]
-	multiply [label="multiply\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:31:9-27"]
-	number_literal_53 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:31:9-10"]
-	call_internal_function_54 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:31:13-27"]
-	internal_function_55 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:31:13-27"]
-	expr_56 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:32:9-27"]
-	divide [label="divide\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:32:9-27"]
-	number_literal_58 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:32:9-10"]
-	call_internal_function_59 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:32:13-27"]
-	internal_function_60 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:32:13-27"]
-	expr_61 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:33:9-27"]
-	bitwise_or [label="bitwise or\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:33:9-27"]
-	number_literal_63 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:33:9-10"]
-	call_internal_function_64 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:33:13-27"]
-	internal_function_65 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:33:13-27"]
-	expr_66 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:34:9-27"]
-	bitwise_and [label="bitwise and\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:34:9-27"]
-	number_literal_68 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:34:9-10"]
-	call_internal_function_69 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:34:13-27"]
-	internal_function_70 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:34:13-27"]
-	expr_71 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:35:9-28"]
-	shift_left [label="shift left\nuint8\ntests/contract_testcases/ewasm/standalone_call.sol:35:9-28"]
-	number_literal_73 [label="uint8 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:35:9-10"]
-	trunc [label="truncate uint8\ntests/contract_testcases/ewasm/standalone_call.sol:35:9-28"]
-	call_internal_function_75 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:35:14-28"]
-	internal_function_76 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:35:14-28"]
-	expr_77 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:36:9-28"]
-	shift_right [label="shift right\nuint8\ntests/contract_testcases/ewasm/standalone_call.sol:36:9-28"]
-	number_literal_79 [label="uint8 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:36:9-10"]
-	trunc_80 [label="truncate uint8\ntests/contract_testcases/ewasm/standalone_call.sol:36:9-28"]
-	call_internal_function_81 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:36:14-28"]
-	internal_function_82 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:36:14-28"]
-	expr_83 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:37:9-22"]
-	not [label="not\ntests/contract_testcases/ewasm/standalone_call.sol:37:9-22"]
-	call_internal_function_85 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:37:10-22"]
-	internal_function_86 [label="function() internal pure returns (bool)\nBABYLINK.returnBool\ntests/contract_testcases/ewasm/standalone_call.sol:37:10-22"]
-	expr_87 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:38:9-24"]
-	complement [label="complement int256\ntests/contract_testcases/ewasm/standalone_call.sol:38:9-24"]
-	call_internal_function_89 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:38:10-24"]
-	internal_function_90 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:38:10-24"]
-	expr_91 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:39:9-24"]
-	call_internal_function_92 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:39:10-24"]
-	internal_function_93 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:39:10-24"]
-	expr_94 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:40:9-24"]
-	unary_minus [label="unary minus int256\ntests/contract_testcases/ewasm/standalone_call.sol:40:9-24"]
-	call_internal_function_96 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:40:10-24"]
-	internal_function_97 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/ewasm/standalone_call.sol:40:10-24"]
-	var_decl_98 [label="variable decl contract foo r\ntests/contract_testcases/ewasm/standalone_call.sol:41:9-26"]
-	constructor [label="constructor contract foo\ntests/contract_testcases/ewasm/standalone_call.sol:41:17-26"]
-	expr_100 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:42:9-16"]
-	call_external_function [label="call external function\ntests/contract_testcases/ewasm/standalone_call.sol:42:9-16"]
-	external_function [label="function() external pure returns (void)\nfoo.bar\ntests/contract_testcases/ewasm/standalone_call.sol:42:9-16"]
-	variable_103 [label="variable: r\ncontract foo\ntests/contract_testcases/ewasm/standalone_call.sol:42:9-10"]
-	expr_104 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:44:9-24"]
-	add_105 [label="add\nrational\ntests/contract_testcases/ewasm/standalone_call.sol:44:9-24"]
-	number_literal_106 [label="uint8 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:44:9-10"]
-	add_107 [label="add\nrational\ntests/contract_testcases/ewasm/standalone_call.sol:44:14-23"]
-	rational_literal [label="rational rational literal: 13/10\ntests/contract_testcases/ewasm/standalone_call.sol:44:14-17"]
-	rational_literal_109 [label="rational rational literal: 9/5\ntests/contract_testcases/ewasm/standalone_call.sol:44:20-23"]
-	var_decl_110 [label="variable decl function(int256) external returns (int256,int256,int256) fptr\ntests/contract_testcases/ewasm/standalone_call.sol:46:9-83"]
-	cast [label="cast function(int256) external returns (int256,int256,int256)\ntests/contract_testcases/ewasm/standalone_call.sol:46:69-83"]
-	external_function_112 [label="function(int256) external pure returns (int256,int256,int256)\nBABYLINK.multipleRetuns\ntests/contract_testcases/ewasm/standalone_call.sol:46:69-83"]
-	builtins [label="builtin GetAddress\ntests/contract_testcases/ewasm/standalone_call.sol:46:64-68"]
-	var_decl_114 [label="variable decl function(int256) internal returns (int256,int256,int256) fptr2\ntests/contract_testcases/ewasm/standalone_call.sol:47:9-79"]
-	cast_115 [label="cast function(int256) internal returns (int256,int256,int256)\ntests/contract_testcases/ewasm/standalone_call.sol:47:65-79"]
-	internal_function_116 [label="function(int256) internal pure returns (int256,int256,int256)\nBABYLINK.multipleRetuns\ntests/contract_testcases/ewasm/standalone_call.sol:47:65-79"]
-	expr_117 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:49:9-16"]
-	call_external_function_118 [label="call external function\ntests/contract_testcases/ewasm/standalone_call.sol:49:9-16"]
-	variable_119 [label="variable: fptr\nfunction(int256) external returns (int256,int256,int256)\ntests/contract_testcases/ewasm/standalone_call.sol:49:9-13"]
-	number_literal_120 [label="int256 literal: 3\ntests/contract_testcases/ewasm/standalone_call.sol:49:14-15"]
-	expr_121 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:50:9-17"]
-	call_internal_function_122 [label="call internal function\ntests/contract_testcases/ewasm/standalone_call.sol:50:9-17"]
-	variable_123 [label="variable: fptr2\nfunction(int256) internal returns (int256,int256,int256)\ntests/contract_testcases/ewasm/standalone_call.sol:50:9-14"]
-	number_literal_124 [label="int256 literal: 3\ntests/contract_testcases/ewasm/standalone_call.sol:50:15-16"]
-	expr_125 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:52:9-45"]
-	call_external_function_126 [label="call external function\ntests/contract_testcases/ewasm/standalone_call.sol:52:9-45"]
-	cast_127 [label="cast address\ntests/contract_testcases/ewasm/standalone_call.sol:52:9-22"]
-	builtins_128 [label="builtin GetAddress\ntests/contract_testcases/ewasm/standalone_call.sol:52:17-21"]
-	alloc_array [label="alloc array bytes\ninitializer: 6d756c7469706c65526574756e73\ntests/contract_testcases/ewasm/standalone_call.sol:52:28-44"]
-	number_literal_130 [label="uint32 literal: 14\ntests/contract_testcases/ewasm/standalone_call.sol:52:28-44"]
-	expr_131 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:53:9-18"]
-	struct_literal [label="struct literal: struct BABYLINK.tts\ntests/contract_testcases/ewasm/standalone_call.sol:53:9-18"]
-	number_literal_133 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:53:13-14"]
-	number_literal_134 [label="int256 literal: 2\ntests/contract_testcases/ewasm/standalone_call.sol:53:16-17"]
-	expr_135 [label="expression\ntests/contract_testcases/ewasm/standalone_call.sol:54:9-25"]
-	struct_literal_136 [label="struct literal: struct BABYLINK.tts\ntests/contract_testcases/ewasm/standalone_call.sol:54:9-25"]
-	number_literal_137 [label="int256 literal: 1\ntests/contract_testcases/ewasm/standalone_call.sol:54:17-18"]
-	number_literal_138 [label="int256 literal: 2\ntests/contract_testcases/ewasm/standalone_call.sol:54:22-23"]
-	return_139 [label="return\ntests/contract_testcases/ewasm/standalone_call.sol:56:9-17"]
-	variable_140 [label="variable: b\nint256\ntests/contract_testcases/ewasm/standalone_call.sol:56:16-17"]
-	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/ewasm/standalone_call.sol:1:1-5:2"]
-	diagnostic_143 [label="found contract 'BABYLINK'\nlevel Debug\ntests/contract_testcases/ewasm/standalone_call.sol:6:1-58:2"]
+	expr [label="expression\ntests/contract_testcases/evm/standalone_call.sol:26:9-26"]
+	call_internal_function [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:26:9-26"]
+	internal_function [label="function(int256) internal pure returns (void)\nBABYLINK.multipleRetuns\ntests/contract_testcases/evm/standalone_call.sol:26:9-26"]
+	number_literal_34 [label="int256 literal: 3\ntests/contract_testcases/evm/standalone_call.sol:26:24-25"]
+	var_decl [label="variable decl int256 b\ntests/contract_testcases/evm/standalone_call.sol:27:9-18"]
+	number_literal_36 [label="int256 literal: 5\ntests/contract_testcases/evm/standalone_call.sol:27:17-18"]
+	expr_37 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:28:9-31"]
+	call_internal_function_38 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:28:9-31"]
+	internal_function_39 [label="function(int256) internal pure returns (void)\nBABYLINK.multipleRetuns\ntests/contract_testcases/evm/standalone_call.sol:28:9-31"]
+	number_literal_40 [label="int256 literal: 9\ntests/contract_testcases/evm/standalone_call.sol:28:28-29"]
+	expr_41 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:29:9-27"]
+	add_42 [label="add\nint256\ntests/contract_testcases/evm/standalone_call.sol:29:9-27"]
+	number_literal_43 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:29:9-10"]
+	call_internal_function_44 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:29:13-27"]
+	internal_function_45 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:29:13-27"]
+	expr_46 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:30:9-27"]
+	subtract [label="subtract\nint256\ntests/contract_testcases/evm/standalone_call.sol:30:9-27"]
+	number_literal_48 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:30:9-10"]
+	call_internal_function_49 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:30:13-27"]
+	internal_function_50 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:30:13-27"]
+	expr_51 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:31:9-27"]
+	multiply [label="multiply\nint256\ntests/contract_testcases/evm/standalone_call.sol:31:9-27"]
+	number_literal_53 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:31:9-10"]
+	call_internal_function_54 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:31:13-27"]
+	internal_function_55 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:31:13-27"]
+	expr_56 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:32:9-27"]
+	divide [label="divide\nint256\ntests/contract_testcases/evm/standalone_call.sol:32:9-27"]
+	number_literal_58 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:32:9-10"]
+	call_internal_function_59 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:32:13-27"]
+	internal_function_60 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:32:13-27"]
+	expr_61 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:33:9-27"]
+	bitwise_or [label="bitwise or\nint256\ntests/contract_testcases/evm/standalone_call.sol:33:9-27"]
+	number_literal_63 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:33:9-10"]
+	call_internal_function_64 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:33:13-27"]
+	internal_function_65 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:33:13-27"]
+	expr_66 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:34:9-27"]
+	bitwise_and [label="bitwise and\nint256\ntests/contract_testcases/evm/standalone_call.sol:34:9-27"]
+	number_literal_68 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:34:9-10"]
+	call_internal_function_69 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:34:13-27"]
+	internal_function_70 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:34:13-27"]
+	expr_71 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:35:9-28"]
+	shift_left [label="shift left\nuint8\ntests/contract_testcases/evm/standalone_call.sol:35:9-28"]
+	number_literal_73 [label="uint8 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:35:9-10"]
+	trunc [label="truncate uint8\ntests/contract_testcases/evm/standalone_call.sol:35:9-28"]
+	call_internal_function_75 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:35:14-28"]
+	internal_function_76 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:35:14-28"]
+	expr_77 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:36:9-28"]
+	shift_right [label="shift right\nuint8\ntests/contract_testcases/evm/standalone_call.sol:36:9-28"]
+	number_literal_79 [label="uint8 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:36:9-10"]
+	trunc_80 [label="truncate uint8\ntests/contract_testcases/evm/standalone_call.sol:36:9-28"]
+	call_internal_function_81 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:36:14-28"]
+	internal_function_82 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:36:14-28"]
+	expr_83 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:37:9-22"]
+	not [label="not\ntests/contract_testcases/evm/standalone_call.sol:37:9-22"]
+	call_internal_function_85 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:37:10-22"]
+	internal_function_86 [label="function() internal pure returns (bool)\nBABYLINK.returnBool\ntests/contract_testcases/evm/standalone_call.sol:37:10-22"]
+	expr_87 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:38:9-24"]
+	complement [label="complement int256\ntests/contract_testcases/evm/standalone_call.sol:38:9-24"]
+	call_internal_function_89 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:38:10-24"]
+	internal_function_90 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:38:10-24"]
+	expr_91 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:39:9-24"]
+	call_internal_function_92 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:39:10-24"]
+	internal_function_93 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:39:10-24"]
+	expr_94 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:40:9-24"]
+	unary_minus [label="unary minus int256\ntests/contract_testcases/evm/standalone_call.sol:40:9-24"]
+	call_internal_function_96 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:40:10-24"]
+	internal_function_97 [label="function() internal pure returns (int256)\nBABYLINK.singleReturn\ntests/contract_testcases/evm/standalone_call.sol:40:10-24"]
+	var_decl_98 [label="variable decl contract foo r\ntests/contract_testcases/evm/standalone_call.sol:41:9-26"]
+	constructor [label="constructor contract foo\ntests/contract_testcases/evm/standalone_call.sol:41:17-26"]
+	expr_100 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:42:9-16"]
+	call_external_function [label="call external function\ntests/contract_testcases/evm/standalone_call.sol:42:9-16"]
+	external_function [label="function() external pure returns (void)\nfoo.bar\ntests/contract_testcases/evm/standalone_call.sol:42:9-16"]
+	variable_103 [label="variable: r\ncontract foo\ntests/contract_testcases/evm/standalone_call.sol:42:9-10"]
+	expr_104 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:44:9-24"]
+	add_105 [label="add\nrational\ntests/contract_testcases/evm/standalone_call.sol:44:9-24"]
+	number_literal_106 [label="uint8 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:44:9-10"]
+	add_107 [label="add\nrational\ntests/contract_testcases/evm/standalone_call.sol:44:14-23"]
+	rational_literal [label="rational rational literal: 13/10\ntests/contract_testcases/evm/standalone_call.sol:44:14-17"]
+	rational_literal_109 [label="rational rational literal: 9/5\ntests/contract_testcases/evm/standalone_call.sol:44:20-23"]
+	var_decl_110 [label="variable decl function(int256) external returns (int256,int256,int256) fptr\ntests/contract_testcases/evm/standalone_call.sol:46:9-83"]
+	cast [label="cast function(int256) external returns (int256,int256,int256)\ntests/contract_testcases/evm/standalone_call.sol:46:69-83"]
+	external_function_112 [label="function(int256) external pure returns (int256,int256,int256)\nBABYLINK.multipleRetuns\ntests/contract_testcases/evm/standalone_call.sol:46:69-83"]
+	builtins [label="builtin GetAddress\ntests/contract_testcases/evm/standalone_call.sol:46:64-68"]
+	var_decl_114 [label="variable decl function(int256) internal returns (int256,int256,int256) fptr2\ntests/contract_testcases/evm/standalone_call.sol:47:9-79"]
+	cast_115 [label="cast function(int256) internal returns (int256,int256,int256)\ntests/contract_testcases/evm/standalone_call.sol:47:65-79"]
+	internal_function_116 [label="function(int256) internal pure returns (int256,int256,int256)\nBABYLINK.multipleRetuns\ntests/contract_testcases/evm/standalone_call.sol:47:65-79"]
+	expr_117 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:49:9-16"]
+	call_external_function_118 [label="call external function\ntests/contract_testcases/evm/standalone_call.sol:49:9-16"]
+	variable_119 [label="variable: fptr\nfunction(int256) external returns (int256,int256,int256)\ntests/contract_testcases/evm/standalone_call.sol:49:9-13"]
+	number_literal_120 [label="int256 literal: 3\ntests/contract_testcases/evm/standalone_call.sol:49:14-15"]
+	expr_121 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:50:9-17"]
+	call_internal_function_122 [label="call internal function\ntests/contract_testcases/evm/standalone_call.sol:50:9-17"]
+	variable_123 [label="variable: fptr2\nfunction(int256) internal returns (int256,int256,int256)\ntests/contract_testcases/evm/standalone_call.sol:50:9-14"]
+	number_literal_124 [label="int256 literal: 3\ntests/contract_testcases/evm/standalone_call.sol:50:15-16"]
+	expr_125 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:52:9-45"]
+	call_external_function_126 [label="call external function\ntests/contract_testcases/evm/standalone_call.sol:52:9-45"]
+	cast_127 [label="cast address\ntests/contract_testcases/evm/standalone_call.sol:52:9-22"]
+	builtins_128 [label="builtin GetAddress\ntests/contract_testcases/evm/standalone_call.sol:52:17-21"]
+	alloc_array [label="alloc array bytes\ninitializer: 6d756c7469706c65526574756e73\ntests/contract_testcases/evm/standalone_call.sol:52:28-44"]
+	number_literal_130 [label="uint32 literal: 14\ntests/contract_testcases/evm/standalone_call.sol:52:28-44"]
+	expr_131 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:53:9-18"]
+	struct_literal [label="struct literal: struct BABYLINK.tts\ntests/contract_testcases/evm/standalone_call.sol:53:9-18"]
+	number_literal_133 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:53:13-14"]
+	number_literal_134 [label="int256 literal: 2\ntests/contract_testcases/evm/standalone_call.sol:53:16-17"]
+	expr_135 [label="expression\ntests/contract_testcases/evm/standalone_call.sol:54:9-25"]
+	struct_literal_136 [label="struct literal: struct BABYLINK.tts\ntests/contract_testcases/evm/standalone_call.sol:54:9-25"]
+	number_literal_137 [label="int256 literal: 1\ntests/contract_testcases/evm/standalone_call.sol:54:17-18"]
+	number_literal_138 [label="int256 literal: 2\ntests/contract_testcases/evm/standalone_call.sol:54:22-23"]
+	return_139 [label="return\ntests/contract_testcases/evm/standalone_call.sol:56:9-17"]
+	variable_140 [label="variable: b\nint256\ntests/contract_testcases/evm/standalone_call.sol:56:16-17"]
+	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/evm/standalone_call.sol:1:1-5:2"]
+	diagnostic_143 [label="found contract 'BABYLINK'\nlevel Debug\ntests/contract_testcases/evm/standalone_call.sol:6:1-58:2"]
 	structs -> tts
 	contracts -> contract
 	contract -> bar [label="function"]

+ 0 - 0
tests/contract_testcases/ewasm/standalone_call.sol → tests/contract_testcases/evm/standalone_call.sol


+ 0 - 12
tests/contract_testcases/ewasm/call/call.dot

@@ -1,12 +0,0 @@
-strict digraph "tests/contract_testcases/ewasm/call/call.sol" {
-	contract [label="contract x\ntests/contract_testcases/ewasm/call/call.sol:2:9-6:10"]
-	f [label="function f\ncontract: x\ntests/contract_testcases/ewasm/call/call.sol:3:13-49\nsignature f(address)\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\naddress payable a"]
-	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/ewasm/call/call.sol:2:9-6:10"]
-	diagnostic_6 [label="'delegatecall' cannot have value specifed\nlevel Error\ntests/contract_testcases/ewasm/call/call.sol:4:45-73"]
-	contracts -> contract
-	contract -> f [label="function"]
-	f -> parameters [label="parameters"]
-	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
-}

+ 0 - 12
tests/contract_testcases/ewasm/call/call_01.dot

@@ -1,12 +0,0 @@
-strict digraph "tests/contract_testcases/ewasm/call/call_01.sol" {
-	contract [label="contract x\ntests/contract_testcases/ewasm/call/call_01.sol:2:9-6:10"]
-	f [label="function f\ncontract: x\ntests/contract_testcases/ewasm/call/call_01.sol:3:13-49\nsignature f(address)\nvisibility public\nmutability nonpayable"]
-	parameters [label="parameters\naddress payable a"]
-	diagnostic [label="found contract 'x'\nlevel Debug\ntests/contract_testcases/ewasm/call/call_01.sol:2:9-6:10"]
-	diagnostic_6 [label="'staticcall' cannot have value specifed\nlevel Error\ntests/contract_testcases/ewasm/call/call_01.sol:4:45-71"]
-	contracts -> contract
-	contract -> f [label="function"]
-	f -> parameters [label="parameters"]
-	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
-}

+ 0 - 1574
tests/contract_testcases/ewasm/comment_tests.dot

@@ -1,1574 +0,0 @@
-strict digraph "tests/contract_testcases/ewasm/comment_tests.sol" {
-	Transfer [label="name:Transfer\ncontract: 0\ntests/contract_testcases/ewasm/comment_tests.sol:58:11-19\nfield name:from ty:address indexed:yes\nfield name:to ty:address indexed:yes\nfield name:value ty:uint256 indexed:no"]
-	Approval [label="name:Approval\ncontract: 0\ntests/contract_testcases/ewasm/comment_tests.sol:61:11-19\nfield name:owner ty:address indexed:yes\nfield name:spender ty:address indexed:yes\nfield name:value ty:uint256 indexed:no"]
-	OwnershipTransferred [label="name:OwnershipTransferred\ncontract: 4\ntests/contract_testcases/ewasm/comment_tests.sol:312:9-29\nfield name:previousOwner ty:address indexed:yes\nfield name:newOwner ty:address indexed:yes"]
-	contract [label="contract IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:16:5-66:2"]
-	balanceOf [label="function balanceOf\ncontract: IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:18:5-19:92\nsignature balanceOf(address)\nvisibility external\nmutability view\nvirtual"]
-	parameters [label="parameters\naddress account"]
-	returns [label="returns\nuint256 "]
-	totalSupply [label="function totalSupply\ncontract: IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:21:5-22:59\nsignature totalSupply()\nvisibility external\nmutability view\nvirtual"]
-	returns_10 [label="returns\nuint256 "]
-	transfer [label="function transfer\ncontract: IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:31:5-35:27\nsignature transfer(address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
-	parameters_12 [label="parameters\naddress recipient\nuint256 amount"]
-	returns_13 [label="returns\nbool "]
-	allowance [label="function allowance\ncontract: IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:38:5-43:26\nsignature allowance(address,address)\nvisibility external\nmutability view\nvirtual"]
-	parameters_15 [label="parameters\naddress owner\naddress spender"]
-	returns_16 [label="returns\nuint256 "]
-	approve [label="function approve\ncontract: IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:46:5-78\nsignature approve(address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
-	parameters_18 [label="parameters\naddress spender\nuint256 amount"]
-	returns_19 [label="returns\nbool "]
-	transferFrom [label="function transferFrom\ncontract: IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:51:5-55:30\nsignature transferFrom(address,address,uint256)\nvisibility external\nmutability nonpayable\nvirtual"]
-	parameters_21 [label="parameters\naddress sender\naddress recipient\nuint256 amount"]
-	returns_22 [label="returns\nbool "]
-	contract_23 [label="contract SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:71:1-151:2"]
-	add [label="function add\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:74:5-71\nsignature add(uint256,uint256)\nvisibility internal\nmutability pure"]
-	parameters_25 [label="parameters\nuint256 a\nuint256 b"]
-	returns_26 [label="returns\nuint256 "]
-	var_decl [label="variable decl uint256 c\ntests/contract_testcases/ewasm/comment_tests.sol:75:9-26"]
-	add_28 [label="add\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:75:21-26"]
-	variable [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:75:21-22"]
-	variable_30 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:75:25-26"]
-	expr [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:76:9-55"]
-	builtins [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:76:9-16"]
-	more_equal [label="more equal\ntests/contract_testcases/ewasm/comment_tests.sol:76:17-23"]
-	variable_34 [label="variable: c\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:76:17-18"]
-	variable_35 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:76:22-23"]
-	alloc_array [label="alloc array string\ninitializer: 536166654d6174683a206164646974696f6e206f766572666c6f77\ntests/contract_testcases/ewasm/comment_tests.sol:76:25-54"]
-	number_literal [label="uint32 literal: 27\ntests/contract_testcases/ewasm/comment_tests.sol:76:25-54"]
-	return [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:78:9-17"]
-	variable_39 [label="variable: c\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:78:16-17"]
-	sub [label="function sub\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:82:5-71\nsignature sub(uint256,uint256)\nvisibility internal\nmutability pure"]
-	parameters_41 [label="parameters\nuint256 a\nuint256 b"]
-	returns_42 [label="returns\nuint256 "]
-	return_43 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:83:9-59"]
-	call_internal_function [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:83:16-59"]
-	internal_function [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:83:16-59"]
-	variable_46 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:83:20-21"]
-	variable_47 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:83:23-24"]
-	alloc_array_48 [label="alloc array string\ninitializer: 536166654d6174683a207375627472616374696f6e206f766572666c6f77\ntests/contract_testcases/ewasm/comment_tests.sol:83:26-58"]
-	number_literal_49 [label="uint32 literal: 30\ntests/contract_testcases/ewasm/comment_tests.sol:83:26-58"]
-	sub_50 [label="function sub\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:89:5-93:38\nsignature sub(uint256,uint256,string)\nvisibility internal\nmutability pure"]
-	parameters_51 [label="parameters\nuint256 a\nuint256 b\nstring errorMessage"]
-	returns_52 [label="returns\nuint256 "]
-	expr_53 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:94:9-38"]
-	builtins_54 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:94:9-16"]
-	less_equal [label="less equal\ntests/contract_testcases/ewasm/comment_tests.sol:94:17-23"]
-	variable_56 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:94:17-18"]
-	variable_57 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:94:22-23"]
-	variable_58 [label="variable: errorMessage\nstring\ntests/contract_testcases/ewasm/comment_tests.sol:94:25-37"]
-	var_decl_59 [label="variable decl uint256 c\ntests/contract_testcases/ewasm/comment_tests.sol:95:9-26"]
-	subtract [label="subtract\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:95:21-26"]
-	variable_61 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:95:21-22"]
-	variable_62 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:95:25-26"]
-	return_63 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:97:9-17"]
-	variable_64 [label="variable: c\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:97:16-17"]
-	mul [label="function mul\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:101:5-71\nsignature mul(uint256,uint256)\nvisibility internal\nmutability pure"]
-	parameters_66 [label="parameters\nuint256 a\nuint256 b"]
-	returns_67 [label="returns\nuint256 "]
-	if [label="if\ntests/contract_testcases/ewasm/comment_tests.sol:105:9-107:10"]
-	equal [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:105:13-19"]
-	variable_70 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:105:13-14"]
-	number_literal_71 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:105:18-19"]
-	return_72 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:106:13-21"]
-	number_literal_73 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:106:20-21"]
-	var_decl_74 [label="variable decl uint256 c\ntests/contract_testcases/ewasm/comment_tests.sol:109:9-26"]
-	multiply [label="multiply\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:109:21-26"]
-	variable_76 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:109:21-22"]
-	variable_77 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:109:25-26"]
-	expr_78 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:110:9-72"]
-	builtins_79 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:110:9-16"]
-	equal_80 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:110:17-27"]
-	divide [label="divide\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:110:17-22"]
-	variable_82 [label="variable: c\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:110:17-18"]
-	variable_83 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:110:21-22"]
-	variable_84 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:110:26-27"]
-	alloc_array_85 [label="alloc array string\ninitializer: 536166654d6174683a206d756c7469706c696275726e726570656174696f6e206f766572666c6f77\ntests/contract_testcases/ewasm/comment_tests.sol:110:29-71"]
-	number_literal_86 [label="uint32 literal: 40\ntests/contract_testcases/ewasm/comment_tests.sol:110:29-71"]
-	return_87 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:114:9-17"]
-	variable_88 [label="variable: c\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:114:16-17"]
-	div [label="function div\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:118:5-71\nsignature div(uint256,uint256)\nvisibility internal\nmutability pure"]
-	parameters_90 [label="parameters\nuint256 a\nuint256 b"]
-	returns_91 [label="returns\nuint256 "]
-	return_92 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:119:9-55"]
-	call_internal_function_93 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:119:16-55"]
-	internal_function_94 [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/ewasm/comment_tests.sol:119:16-55"]
-	variable_95 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:119:20-21"]
-	variable_96 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:119:23-24"]
-	alloc_array_97 [label="alloc array string\ninitializer: 536166654d6174683a206469766973696f6e206279207a65726f\ntests/contract_testcases/ewasm/comment_tests.sol:119:26-54"]
-	number_literal_98 [label="uint32 literal: 26\ntests/contract_testcases/ewasm/comment_tests.sol:119:26-54"]
-	div_99 [label="function div\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:123:5-127:38\nsignature div(uint256,uint256,string)\nvisibility internal\nmutability pure"]
-	parameters_100 [label="parameters\nuint256 a\nuint256 b\nstring errorMessage"]
-	returns_101 [label="returns\nuint256 "]
-	expr_102 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:128:9-37"]
-	builtins_103 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:128:9-16"]
-	more [label="more\ntests/contract_testcases/ewasm/comment_tests.sol:128:17-22"]
-	variable_105 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:128:17-18"]
-	number_literal_106 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:128:21-22"]
-	variable_107 [label="variable: errorMessage\nstring\ntests/contract_testcases/ewasm/comment_tests.sol:128:24-36"]
-	var_decl_108 [label="variable decl uint256 c\ntests/contract_testcases/ewasm/comment_tests.sol:129:9-26"]
-	divide_109 [label="divide\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:129:21-26"]
-	variable_110 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:129:21-22"]
-	variable_111 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:129:25-26"]
-	return_112 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:132:9-17"]
-	variable_113 [label="variable: c\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:132:16-17"]
-	Mdos [label="function Mdos\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:136:5-72\nsignature Mdos(uint256,uint256)\nvisibility internal\nmutability pure"]
-	parameters_115 [label="parameters\nuint256 a\nuint256 b"]
-	returns_116 [label="returns\nuint256 "]
-	return_117 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:137:9-54"]
-	call_internal_function_118 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:137:16-54"]
-	internal_function_119 [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.Mdos\ntests/contract_testcases/ewasm/comment_tests.sol:137:16-54"]
-	variable_120 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:137:21-22"]
-	variable_121 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:137:24-25"]
-	alloc_array_122 [label="alloc array string\ninitializer: 536166654d6174683a206d6f64756c6f206279207a65726f\ntests/contract_testcases/ewasm/comment_tests.sol:137:27-53"]
-	number_literal_123 [label="uint32 literal: 24\ntests/contract_testcases/ewasm/comment_tests.sol:137:27-53"]
-	Mdos_124 [label="function Mdos\ncontract: SafeMath\ntests/contract_testcases/ewasm/comment_tests.sol:143:5-147:38\nsignature Mdos(uint256,uint256,string)\nvisibility internal\nmutability pure"]
-	parameters_125 [label="parameters\nuint256 a\nuint256 b\nstring errorMessage"]
-	returns_126 [label="returns\nuint256 "]
-	expr_127 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:148:9-38"]
-	builtins_128 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:148:9-16"]
-	not [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:148:17-23"]
-	equal_130 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:148:17-23"]
-	variable_131 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:148:17-18"]
-	number_literal_132 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:148:22-23"]
-	variable_133 [label="variable: errorMessage\nstring\ntests/contract_testcases/ewasm/comment_tests.sol:148:25-37"]
-	return_134 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:149:9-21"]
-	modulo [label="modulo\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:149:16-21"]
-	variable_136 [label="variable: a\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:149:16-17"]
-	variable_137 [label="variable: b\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:149:20-21"]
-	contract_138 [label="contract Context\ntests/contract_testcases/ewasm/comment_tests.sol:152:1-166:2"]
-	_msgSender [label="function _msgSender\ncontract: Context\ntests/contract_testcases/ewasm/comment_tests.sol:154:5-74\nsignature _msgSender()\nvisibility internal\nmutability view\nvirtual"]
-	returns_140 [label="returns\naddress payable "]
-	return_141 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:155:9-26"]
-	builtins_142 [label="builtin Sender\ntests/contract_testcases/ewasm/comment_tests.sol:155:16-26"]
-	_msgData [label="function _msgData\ncontract: Context\ntests/contract_testcases/ewasm/comment_tests.sol:160:5-69\nsignature _msgData()\nvisibility internal\nmutability view\nvirtual"]
-	returns_144 [label="returns\nbytes "]
-	expr_145 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:161:9-13"]
-	builtins_146 [label="builtin GetAddress\ntests/contract_testcases/ewasm/comment_tests.sol:161:9-13"]
-	return_147 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:162:9-24"]
-	builtins_148 [label="builtin Calldata\ntests/contract_testcases/ewasm/comment_tests.sol:162:16-24"]
-	contract_149 [label="contract Address\ntests/contract_testcases/ewasm/comment_tests.sol:168:1-300:2"]
-	isContract [label="function isContract\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:171:5-70\nsignature isContract(address)\nvisibility internal\nmutability view"]
-	parameters_151 [label="parameters\naddress account"]
-	returns_152 [label="returns\nbool "]
-	var_decl_153 [label="variable decl bytes32 codehash\ntests/contract_testcases/ewasm/comment_tests.sol:173:9-25"]
-	var_decl_154 [label="variable decl bytes32 accountHash\ntests/contract_testcases/ewasm/comment_tests.sol:176:13-177:78"]
-	number_literal_155 [label="bytes32 literal: 89477152217924674838424037953991966239322087453347756267410168184682657981552\ntests/contract_testcases/ewasm/comment_tests.sol:177:12-78"]
-	inline_assembly [label="inline assembly\ntests/contract_testcases/ewasm/comment_tests.sol:179:9-183:10"]
-	return_157 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:184:9-60"]
-	logical_and [label="logical and\ntests/contract_testcases/ewasm/comment_tests.sol:184:17-59"]
-	not_159 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:184:17-40"]
-	equal_160 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:184:17-40"]
-	variable_161 [label="variable: codehash\nbytes32\ntests/contract_testcases/ewasm/comment_tests.sol:184:17-25"]
-	variable_162 [label="variable: accountHash\nbytes32\ntests/contract_testcases/ewasm/comment_tests.sol:184:29-40"]
-	not_163 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:184:44-59"]
-	equal_164 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:184:44-59"]
-	variable_165 [label="variable: codehash\nbytes32\ntests/contract_testcases/ewasm/comment_tests.sol:184:44-52"]
-	number_literal_166 [label="bytes32 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:184:56-59"]
-	sendValue [label="function sendValue\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:188:5-75\nsignature sendValue(address,uint256)\nvisibility internal\nmutability nonpayable"]
-	parameters_168 [label="parameters\naddress payable recipient\nuint256 amount"]
-	expr_169 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:189:9-192:10"]
-	builtins_170 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:189:9-16"]
-	more_equal_171 [label="more equal\ntests/contract_testcases/ewasm/comment_tests.sol:190:13-44"]
-	sign_ext [label="sign extend uint256\ntests/contract_testcases/ewasm/comment_tests.sol:190:13-34"]
-	builtins_173 [label="builtin Balance\ntests/contract_testcases/ewasm/comment_tests.sol:190:13-34"]
-	cast [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:190:13-26"]
-	builtins_175 [label="builtin GetAddress\ntests/contract_testcases/ewasm/comment_tests.sol:190:21-25"]
-	variable_176 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:190:38-44"]
-	alloc_array_177 [label="alloc array string\ninitializer: 416464726573733a20696e73756666696369656e742062616c616e6365\ntests/contract_testcases/ewasm/comment_tests.sol:191:13-44"]
-	number_literal_178 [label="uint32 literal: 29\ntests/contract_testcases/ewasm/comment_tests.sol:191:13-44"]
-	destructure [label="destructure\ntests/contract_testcases/ewasm/comment_tests.sol:195:9-61"]
-	param [label="bool success"]
-	none [label="none"]
-	call_external_function [label="call external function\ntests/contract_testcases/ewasm/comment_tests.sol:195:28-61"]
-	variable_183 [label="variable: recipient\naddress payable\ntests/contract_testcases/ewasm/comment_tests.sol:195:28-37"]
-	alloc_array_184 [label="alloc array bytes\ninitializer: \ntests/contract_testcases/ewasm/comment_tests.sol:195:58-60"]
-	number_literal_185 [label="uint32 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:195:58-60"]
-	trunc [label="checking truncate uint128\ntests/contract_testcases/ewasm/comment_tests.sol:195:50-56"]
-	variable_187 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:195:50-56"]
-	expr_188 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:196:9-201:10"]
-	builtins_189 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:196:9-16"]
-	variable_190 [label="variable: success\nbool\ntests/contract_testcases/ewasm/comment_tests.sol:199:13-20"]
-	alloc_array_191 [label="alloc array string\ninitializer: 416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564\ntests/contract_testcases/ewasm/comment_tests.sol:200:13-73"]
-	number_literal_192 [label="uint32 literal: 58\ntests/contract_testcases/ewasm/comment_tests.sol:200:13-73"]
-	functionCall [label="function functionCall\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:205:5-208:31\nsignature functionCall(address,bytes)\nvisibility internal\nmutability nonpayable"]
-	parameters_194 [label="parameters\naddress target\nbytes data"]
-	returns_195 [label="returns\nbytes "]
-	return_196 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:210:9-76"]
-	call_internal_function_197 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:210:16-76"]
-	internal_function_198 [label="function(address,bytes,string) internal returns (bytes)\nAddress.functionCall\ntests/contract_testcases/ewasm/comment_tests.sol:210:16-76"]
-	variable_199 [label="variable: target\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:210:29-35"]
-	variable_200 [label="variable: data\nbytes\ntests/contract_testcases/ewasm/comment_tests.sol:210:37-41"]
-	alloc_array_201 [label="alloc array string\ninitializer: 416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564\ntests/contract_testcases/ewasm/comment_tests.sol:210:43-75"]
-	number_literal_202 [label="uint32 literal: 30\ntests/contract_testcases/ewasm/comment_tests.sol:210:43-75"]
-	functionCall_203 [label="function functionCall\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:216:5-221:38\nsignature functionCall(address,bytes,string)\nvisibility internal\nmutability nonpayable"]
-	parameters_204 [label="parameters\naddress target\nbytes data\nstring errorMessage"]
-	returns_205 [label="returns\nbytes "]
-	return_206 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:222:9-69"]
-	call_internal_function_207 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:222:16-69"]
-	internal_function_208 [label="function(address,bytes,uint256,string) internal returns (bytes)\nAddress._functionCallWithValue\ntests/contract_testcases/ewasm/comment_tests.sol:222:16-69"]
-	variable_209 [label="variable: target\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:222:39-45"]
-	variable_210 [label="variable: data\nbytes\ntests/contract_testcases/ewasm/comment_tests.sol:222:47-51"]
-	number_literal_211 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:222:53-54"]
-	variable_212 [label="variable: errorMessage\nstring\ntests/contract_testcases/ewasm/comment_tests.sol:222:56-68"]
-	functionCallWithValue [label="function functionCallWithValue\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:228:5-233:38\nsignature functionCallWithValue(address,bytes,uint256)\nvisibility internal\nmutability nonpayable"]
-	parameters_214 [label="parameters\naddress target\nbytes data\nuint256 value"]
-	returns_215 [label="returns\nbytes "]
-	return_216 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:234:9-242:14"]
-	call_internal_function_217 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:235:13-242:14"]
-	internal_function_218 [label="function(address,bytes,uint256,string) internal returns (bytes)\nAddress.functionCallWithValue\ntests/contract_testcases/ewasm/comment_tests.sol:235:13-242:14"]
-	variable_219 [label="variable: target\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:236:17-23"]
-	variable_220 [label="variable: data\nbytes\ntests/contract_testcases/ewasm/comment_tests.sol:237:17-21"]
-	variable_221 [label="variable: value\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:240:17-22"]
-	alloc_array_222 [label="alloc array string\ninitializer: 416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564\ntests/contract_testcases/ewasm/comment_tests.sol:241:17-60"]
-	number_literal_223 [label="uint32 literal: 41\ntests/contract_testcases/ewasm/comment_tests.sol:241:17-60"]
-	functionCallWithValue_224 [label="function functionCallWithValue\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:246:5-254:38\nsignature functionCallWithValue(address,bytes,uint256,string)\nvisibility internal\nmutability nonpayable"]
-	parameters_225 [label="parameters\naddress target\nbytes data\nuint256 value\nstring errorMessage"]
-	returns_226 [label="returns\nbytes "]
-	expr_227 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:255:9-258:10"]
-	builtins_228 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:255:9-16"]
-	more_equal_229 [label="more equal\ntests/contract_testcases/ewasm/comment_tests.sol:256:13-43"]
-	sign_ext_230 [label="sign extend uint256\ntests/contract_testcases/ewasm/comment_tests.sol:256:13-34"]
-	builtins_231 [label="builtin Balance\ntests/contract_testcases/ewasm/comment_tests.sol:256:13-34"]
-	cast_232 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:256:13-26"]
-	builtins_233 [label="builtin GetAddress\ntests/contract_testcases/ewasm/comment_tests.sol:256:21-25"]
-	variable_234 [label="variable: value\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:256:38-43"]
-	alloc_array_235 [label="alloc array string\ninitializer: 416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c\ntests/contract_testcases/ewasm/comment_tests.sol:257:13-53"]
-	number_literal_236 [label="uint32 literal: 38\ntests/contract_testcases/ewasm/comment_tests.sol:257:13-53"]
-	return_237 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:259:9-73"]
-	call_internal_function_238 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:259:16-73"]
-	internal_function_239 [label="function(address,bytes,uint256,string) internal returns (bytes)\nAddress._functionCallWithValue\ntests/contract_testcases/ewasm/comment_tests.sol:259:16-73"]
-	variable_240 [label="variable: target\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:259:39-45"]
-	variable_241 [label="variable: data\nbytes\ntests/contract_testcases/ewasm/comment_tests.sol:259:47-51"]
-	variable_242 [label="variable: value\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:259:53-58"]
-	variable_243 [label="variable: errorMessage\nstring\ntests/contract_testcases/ewasm/comment_tests.sol:259:60-72"]
-	_functionCallWithValue [label="function _functionCallWithValue\ncontract: Address\ntests/contract_testcases/ewasm/comment_tests.sol:264:5-270:37\nsignature _functionCallWithValue(address,bytes,uint256,string)\nvisibility private\nmutability nonpayable"]
-	parameters_245 [label="parameters\naddress target\nbytes data\nuint256 weiValue\nstring errorMessage"]
-	returns_246 [label="returns\nbytes "]
-	contract_247 [label="contract Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:302:1-373:2"]
-	base [label="base Context\ntests/contract_testcases/ewasm/comment_tests.sol:303:21-28"]
-	var [label="variable owners\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:304:5-27"]
-	var_250 [label="variable _owner\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:305:5-27"]
-	var_251 [label="variable _deadAddress\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:357:5-78"]
-	number_literal_252 [label="address literal: 57005\ntests/contract_testcases/ewasm/comment_tests.sol:357:36-78"]
-	node_253 [label="constructor \ncontract: Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:320:9-321:17\nsignature ()\nvisibility public\nmutability nonpayable"]
-	var_decl_254 [label="variable decl address msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:323:9-41"]
-	cast_255 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:323:29-41"]
-	call_internal_function_256 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:323:29-41"]
-	internal_function_257 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:323:29-41"]
-	expr_258 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:324:9-27"]
-	assign [label="assign\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:324:9-15"]
-	storage_var [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:324:9-15"]
-	variable_261 [label="variable: msgSender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:324:18-27"]
-	emit [label="emit\nevent Ownable.OwnershipTransferred\ntests/contract_testcases/ewasm/comment_tests.sol:327:9-57"]
-	number_literal_263 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:327:35-45"]
-	variable_264 [label="variable: msgSender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:327:47-56"]
-	owner [label="function owner\ncontract: Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:330:5-51\nsignature owner()\nvisibility public\nmutability view"]
-	returns_266 [label="returns\naddress "]
-	return_267 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:331:9-22"]
-	storage_load [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:331:9-22"]
-	storage_var_269 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:331:16-22"]
-	onlyOwner [label="modifier onlyOwner\ncontract: Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:336:5-26\nmutability nonpayable"]
-	expr_271 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:337:9-76"]
-	builtins_272 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:337:9-16"]
-	equal_273 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:337:17-39"]
-	storage_load_274 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:337:17-23"]
-	storage_var_275 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:337:17-23"]
-	cast_276 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:337:27-39"]
-	call_internal_function_277 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:337:27-39"]
-	internal_function_278 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:337:27-39"]
-	alloc_array_279 [label="alloc array string\ninitializer: 4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\ntests/contract_testcases/ewasm/comment_tests.sol:337:41-75"]
-	number_literal_280 [label="uint32 literal: 32\ntests/contract_testcases/ewasm/comment_tests.sol:337:41-75"]
-	underscore [label="undersore\ntests/contract_testcases/ewasm/comment_tests.sol:338:9-10"]
-	onlyOwners [label="modifier onlyOwners\ncontract: Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:343:9-346:5\nmutability nonpayable"]
-	expr_283 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:347:9-40"]
-	builtins_284 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:347:9-16"]
-	equal_285 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:347:17-39"]
-	storage_load_286 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:347:17-23"]
-	storage_var_287 [label="storage variable\nOwnable.owners\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:347:17-23"]
-	cast_288 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:347:27-39"]
-	call_internal_function_289 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:347:27-39"]
-	internal_function_290 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:347:27-39"]
-	underscore_291 [label="undersore\ntests/contract_testcases/ewasm/comment_tests.sol:348:9-10"]
-	transfer_292 [label="function transfer\ncontract: Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:350:5-353:18\nsignature transfer(address,address)\nvisibility external\nmutability nonpayable"]
-	parameters_293 [label="parameters\naddress amm\naddress fct"]
-	expr_294 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:354:13-41"]
-	builtins_295 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:354:13-20"]
-	equal_296 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:354:21-36"]
-	variable_297 [label="variable: fct\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:354:21-24"]
-	number_literal_298 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:354:26-36"]
-	alloc_array_299 [label="alloc array string\ninitializer: 2e\ntests/contract_testcases/ewasm/comment_tests.sol:354:37-40"]
-	number_literal_300 [label="uint32 literal: 1\ntests/contract_testcases/ewasm/comment_tests.sol:354:37-40"]
-	expr_301 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:355:13-33"]
-	assign_302 [label="assign\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:355:13-19"]
-	storage_var_303 [label="storage variable\nOwnable.owners\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:355:13-19"]
-	variable_304 [label="variable: amm\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:355:30-33"]
-	renounceOwnership [label="function renounceOwnership\ncontract: Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:358:5-364:9\nsignature renounceOwnership()\nvisibility public\nmutability nonpayable\nvirtual"]
-	expr_306 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:366:10-31"]
-	assign_307 [label="assign\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:366:10-16"]
-	storage_var_308 [label="storage variable\nOwnable._owner\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:366:10-16"]
-	storage_load_309 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:366:19-31"]
-	storage_var_310 [label="storage variable\nOwnable._deadAddress\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:366:19-31"]
-	contract_311 [label="contract TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:374:1-679:2"]
-	base_312 [label="base Context\ntests/contract_testcases/ewasm/comment_tests.sol:375:22-29"]
-	base_313 [label="base IERC20\ntests/contract_testcases/ewasm/comment_tests.sol:375:31-37"]
-	base_314 [label="base Ownable\ntests/contract_testcases/ewasm/comment_tests.sol:375:39-46"]
-	var_315 [label="variable _allowance\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:381:9-83"]
-	var_316 [label="variable _espat\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:382:9-48"]
-	var_317 [label="variable _lances\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:383:9-60"]
-	var_318 [label="variable _isExcludedFromF\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:385:9-66"]
-	var_319 [label="variable _isExcluded\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:386:9-61"]
-	var_320 [label="variable MAX\nvisibility private\nconstant\ntests/contract_testcases/ewasm/comment_tests.sol:390:9-51"]
-	complement [label="complement uint256\ntests/contract_testcases/ewasm/comment_tests.sol:390:40-51"]
-	number_literal_322 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:390:41-51"]
-	var_323 [label="variable _Ttotal\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:391:9-60"]
-	multiply_324 [label="multiply\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:391:35-60"]
-	number_literal_325 [label="uint256 literal: 10000000000000000\ntests/contract_testcases/ewasm/comment_tests.sol:391:35-52"]
-	power [label="power\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:391:55-60"]
-	number_literal_327 [label="uint256 literal: 10\ntests/contract_testcases/ewasm/comment_tests.sol:391:55-57"]
-	number_literal_328 [label="uint256 literal: 9\ntests/contract_testcases/ewasm/comment_tests.sol:391:59-60"]
-	var_329 [label="variable deadF\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:400:5-30"]
-	number_literal_330 [label="uint256 literal: 5\ntests/contract_testcases/ewasm/comment_tests.sol:400:29-30"]
-	var_331 [label="variable marketingWallet\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:401:5-40"]
-	number_literal_332 [label="uint256 literal: 3\ntests/contract_testcases/ewasm/comment_tests.sol:401:39-40"]
-	var_333 [label="variable deadAddress\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:402:5-77"]
-	number_literal_334 [label="address literal: 57005\ntests/contract_testcases/ewasm/comment_tests.sol:402:35-77"]
-	var_335 [label="variable ratify\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:407:5-31"]
-	bool_literal [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:407:27-31"]
-	var_337 [label="variable burnrepeat\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:408:5-44"]
-	number_literal_338 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:408:34-44"]
-	var_339 [label="variable owners\nvisibility internal\ntests/contract_testcases/ewasm/comment_tests.sol:409:5-19"]
-	var_340 [label="variable _tFeeTotal\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:410:5-31"]
-	var_341 [label="variable _decimals\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:411:5-28"]
-	var_342 [label="variable _symbol\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:412:5-27"]
-	var_343 [label="variable _name\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:413:5-25"]
-	var_344 [label="variable damada\nvisibility private\ntests/contract_testcases/ewasm/comment_tests.sol:522:5-27"]
-	using [label="using for uint256\nlibrary SafeMath"]
-	using_346 [label="using for address\nlibrary Address"]
-	node_347 [label="constructor \ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:415:9-417:11\nsignature ()\nvisibility public\nmutability nonpayable"]
-	expr_348 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:419:14-47"]
-	assign_349 [label="assign\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:419:14-20"]
-	storage_var_350 [label="storage variable\nTigerBNB.owners\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:419:14-20"]
-	cast_351 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:419:31-47"]
-	call_internal_function_352 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:419:31-47"]
-	internal_function_353 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:419:31-47"]
-	expr_354 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:420:13-56"]
-	assign_355 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:420:13-56"]
-	subscript [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:420:13-38"]
-	storage_var_357 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:420:13-20"]
-	cast_358 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:420:25-37"]
-	call_internal_function_359 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:420:25-37"]
-	internal_function_360 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:420:25-37"]
-	storage_load_361 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:420:49-56"]
-	storage_var_362 [label="storage variable\nTigerBNB._Ttotal\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:420:49-56"]
-	expr_363 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:422:13-34"]
-	assign_364 [label="assign\nuint8 storage\ntests/contract_testcases/ewasm/comment_tests.sol:422:13-22"]
-	storage_var_365 [label="storage variable\nTigerBNB._decimals\nuint8 storage\ntests/contract_testcases/ewasm/comment_tests.sol:422:13-22"]
-	number_literal_366 [label="uint8 literal: 8\ntests/contract_testcases/ewasm/comment_tests.sol:422:33-34"]
-	expr_367 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:423:13-39"]
-	assign_368 [label="assign\nstring storage\ntests/contract_testcases/ewasm/comment_tests.sol:423:13-18"]
-	storage_var_369 [label="storage variable\nTigerBNB._name\nstring storage\ntests/contract_testcases/ewasm/comment_tests.sol:423:13-18"]
-	alloc_array_370 [label="alloc array string\ninitializer: 5469676572424e42\ntests/contract_testcases/ewasm/comment_tests.sol:423:29-39"]
-	number_literal_371 [label="uint32 literal: 8\ntests/contract_testcases/ewasm/comment_tests.sol:423:29-39"]
-	expr_372 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:424:13-41"]
-	assign_373 [label="assign\nstring storage\ntests/contract_testcases/ewasm/comment_tests.sol:424:13-20"]
-	storage_var_374 [label="storage variable\nTigerBNB._symbol\nstring storage\ntests/contract_testcases/ewasm/comment_tests.sol:424:13-20"]
-	alloc_array_375 [label="alloc array string\ninitializer: 5469676572424e42\ntests/contract_testcases/ewasm/comment_tests.sol:424:31-41"]
-	number_literal_376 [label="uint32 literal: 8\ntests/contract_testcases/ewasm/comment_tests.sol:424:31-41"]
-	expr_377 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:425:9-41"]
-	assign_378 [label="assign\nbool storage\ntests/contract_testcases/ewasm/comment_tests.sol:425:9-41"]
-	subscript_379 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:425:9-34"]
-	storage_var_380 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:425:9-25"]
-	call_internal_function_381 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:425:26-33"]
-	internal_function_382 [label="function() internal view returns (address)\nOwnable.owner\ntests/contract_testcases/ewasm/comment_tests.sol:425:26-33"]
-	bool_literal_383 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:425:37-41"]
-	expr_384 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:426:9-47"]
-	assign_385 [label="assign\nbool storage\ntests/contract_testcases/ewasm/comment_tests.sol:426:9-47"]
-	subscript_386 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:426:9-40"]
-	storage_var_387 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:426:9-25"]
-	cast_388 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:426:26-39"]
-	builtins_389 [label="builtin GetAddress\ntests/contract_testcases/ewasm/comment_tests.sol:426:34-38"]
-	bool_literal_390 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:426:43-47"]
-	emit_391 [label="emit\nevent IERC20.Transfer\ntests/contract_testcases/ewasm/comment_tests.sol:430:9-77"]
-	number_literal_392 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:430:27-37"]
-	cast_393 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:430:47-59"]
-	call_internal_function_394 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:430:47-59"]
-	internal_function_395 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:430:47-59"]
-	storage_load_396 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:430:65-72"]
-	storage_var_397 [label="storage variable\nTigerBNB._Ttotal\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:430:65-72"]
-	name [label="function name\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:435:9-440:24\nsignature name()\nvisibility public\nmutability view"]
-	returns_399 [label="returns\nstring "]
-	return_400 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:441:9-21"]
-	storage_load_401 [label="storage load string\ntests/contract_testcases/ewasm/comment_tests.sol:441:9-21"]
-	storage_var_402 [label="storage variable\nTigerBNB._name\nstring storage\ntests/contract_testcases/ewasm/comment_tests.sol:441:16-21"]
-	symbol [label="function symbol\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:443:9-448:20\nsignature symbol()\nvisibility public\nmutability view"]
-	returns_404 [label="returns\nstring "]
-	return_405 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:449:13-27"]
-	storage_load_406 [label="storage load string\ntests/contract_testcases/ewasm/comment_tests.sol:449:13-27"]
-	storage_var_407 [label="storage variable\nTigerBNB._symbol\nstring storage\ntests/contract_testcases/ewasm/comment_tests.sol:449:20-27"]
-	decimals [label="function decimals\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:452:13-457:16\nsignature decimals()\nvisibility public\nmutability view"]
-	returns_409 [label="returns\nuint8 "]
-	return_410 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:459:13-33"]
-	storage_load_411 [label="storage load uint8\ntests/contract_testcases/ewasm/comment_tests.sol:459:13-33"]
-	storage_var_412 [label="storage variable\nTigerBNB._decimals\nuint8 storage\ntests/contract_testcases/ewasm/comment_tests.sol:459:24-33"]
-	balanceOf_413 [label="function balanceOf\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:463:5-79\nsignature balanceOf(address)\nvisibility public\nmutability view\noverride"]
-	parameters_414 [label="parameters\naddress account"]
-	returns_415 [label="returns\nuint256 "]
-	return_416 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:464:13-36"]
-	storage_load_417 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:464:13-36"]
-	subscript_418 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:464:20-36"]
-	storage_var_419 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:464:20-27"]
-	variable_420 [label="variable: account\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:464:28-35"]
-	totalSupply_421 [label="function totalSupply\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:466:5-66\nsignature totalSupply()\nvisibility public\nmutability view\noverride"]
-	returns_422 [label="returns\nuint256 "]
-	return_423 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:467:9-23"]
-	storage_load_424 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:467:9-23"]
-	storage_var_425 [label="storage variable\nTigerBNB._Ttotal\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:467:16-23"]
-	transfer_426 [label="function transfer\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:476:5-483:23\nsignature transfer(address,uint256)\nvisibility public\nmutability nonpayable\noverride"]
-	parameters_427 [label="parameters\naddress recipient\nuint256 amount"]
-	returns_428 [label="returns\nbool "]
-	if_429 [label="if\ntests/contract_testcases/ewasm/comment_tests.sol:485:13-488:10"]
-	logical_or [label="logical or\ntests/contract_testcases/ewasm/comment_tests.sol:485:24-113"]
-	storage_load_431 [label="storage load bool\ntests/contract_testcases/ewasm/comment_tests.sol:485:24-113"]
-	subscript_432 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:485:24-62"]
-	storage_var_433 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:485:24-40"]
-	cast_434 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:485:45-57"]
-	call_internal_function_435 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:485:45-57"]
-	internal_function_436 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:485:45-57"]
-	storage_load_437 [label="storage load bool\ntests/contract_testcases/ewasm/comment_tests.sol:485:24-113"]
-	subscript_438 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:485:78-113"]
-	storage_var_439 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:485:78-94"]
-	variable_440 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:485:103-112"]
-	expr_441 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:486:17-79"]
-	call_internal_function_442 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:486:17-79"]
-	internal_function_443 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:486:17-79"]
-	cast_444 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:486:35-51"]
-	call_internal_function_445 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:486:35-51"]
-	internal_function_446 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:486:35-51"]
-	variable_447 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:486:57-66"]
-	variable_448 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:486:72-78"]
-	return_449 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:487:13-24"]
-	bool_literal_450 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:487:20-24"]
-	var_decl_451 [label="variable decl uint256 Market\ntests/contract_testcases/ewasm/comment_tests.sol:491:14-95"]
-	call_internal_function_452 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:491:43-95"]
-	internal_function_453 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/ewasm/comment_tests.sol:491:43-95"]
-	call_internal_function_454 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:491:43-82"]
-	internal_function_455 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/ewasm/comment_tests.sol:491:43-82"]
-	variable_456 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:491:43-49"]
-	storage_load_457 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:491:62-77"]
-	storage_var_458 [label="storage variable\nTigerBNB.marketingWallet\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:491:62-77"]
-	number_literal_459 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/comment_tests.sol:491:91-94"]
-	var_decl_460 [label="variable decl uint256 Burn\ntests/contract_testcases/ewasm/comment_tests.sol:492:9-78"]
-	call_internal_function_461 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:492:36-78"]
-	internal_function_462 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/ewasm/comment_tests.sol:492:36-78"]
-	call_internal_function_463 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:492:36-65"]
-	internal_function_464 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/ewasm/comment_tests.sol:492:36-65"]
-	variable_465 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:492:36-42"]
-	storage_load_466 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:492:59-64"]
-	storage_var_467 [label="storage variable\nTigerBNB.deadF\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:492:59-64"]
-	number_literal_468 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/comment_tests.sol:492:74-77"]
-	expr_469 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:493:13-72"]
-	call_internal_function_470 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:493:13-72"]
-	internal_function_471 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:493:13-72"]
-	cast_472 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:493:27-39"]
-	call_internal_function_473 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:493:27-39"]
-	internal_function_474 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:493:27-39"]
-	storage_load_475 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:493:45-51"]
-	storage_var_476 [label="storage variable\nTigerBNB.owners\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:493:45-51"]
-	variable_477 [label="variable: Market\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:493:61-67"]
-	expr_478 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:494:13-75"]
-	call_internal_function_479 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:494:13-75"]
-	internal_function_480 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:494:13-75"]
-	cast_481 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:494:27-39"]
-	call_internal_function_482 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:494:27-39"]
-	internal_function_483 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:494:27-39"]
-	storage_load_484 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:494:45-56"]
-	storage_var_485 [label="storage variable\nTigerBNB.deadAddress\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:494:45-56"]
-	variable_486 [label="variable: Burn\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:494:66-70"]
-	expr_487 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:495:13-109"]
-	call_internal_function_488 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:495:13-109"]
-	internal_function_489 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:495:13-109"]
-	cast_490 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:495:27-39"]
-	call_internal_function_491 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:495:27-39"]
-	internal_function_492 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:495:27-39"]
-	variable_493 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:495:45-54"]
-	call_internal_function_494 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:495:64-108"]
-	internal_function_495 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:495:64-108"]
-	call_internal_function_496 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:495:64-90"]
-	internal_function_497 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:495:64-90"]
-	variable_498 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:495:64-70"]
-	variable_499 [label="variable: Market\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:495:83-89"]
-	variable_500 [label="variable: Burn\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:495:103-107"]
-	return_501 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:496:9-24"]
-	bool_literal_502 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:496:20-24"]
-	allowance_503 [label="function allowance\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:499:5-503:26\nsignature allowance(address,address)\nvisibility public\nmutability view\noverride"]
-	parameters_504 [label="parameters\naddress owner\naddress spender"]
-	returns_505 [label="returns\nuint256 "]
-	return_506 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:507:9-42"]
-	storage_load_507 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:507:9-42"]
-	subscript_508 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:507:16-42"]
-	subscript_509 [label="subscript mapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/ewasm/comment_tests.sol:507:16-33"]
-	storage_var_510 [label="storage variable\nTigerBNB._allowance\nmapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/ewasm/comment_tests.sol:507:16-26"]
-	variable_511 [label="variable: owner\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:507:27-32"]
-	variable_512 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:507:34-41"]
-	approve_513 [label="function approve\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:510:5-513:23\nsignature approve(address,uint256)\nvisibility public\nmutability nonpayable\noverride"]
-	parameters_514 [label="parameters\naddress spender\nuint256 amount"]
-	returns_515 [label="returns\nbool "]
-	expr_516 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:517:9-48"]
-	call_internal_function_517 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:517:9-48"]
-	internal_function_518 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._approve\ntests/contract_testcases/ewasm/comment_tests.sol:517:9-48"]
-	cast_519 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:517:18-30"]
-	call_internal_function_520 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:517:18-30"]
-	internal_function_521 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:517:18-30"]
-	variable_522 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:517:32-39"]
-	variable_523 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:517:41-47"]
-	return_524 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:518:9-20"]
-	bool_literal_525 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:518:16-20"]
-	transferFrom_526 [label="function transferFrom\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:524:5-530:37\nsignature transferFrom(address,address,uint256)\nvisibility public\nmutability nonpayable\noverride"]
-	parameters_527 [label="parameters\naddress sender\naddress recipient\nuint256 amount"]
-	returns_528 [label="returns\nbool "]
-	expr_529 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:531:9-22"]
-	assign_530 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:531:9-15"]
-	storage_var_531 [label="storage variable\nTigerBNB.damada\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:531:9-15"]
-	number_literal_532 [label="uint256 literal: 3354\ntests/contract_testcases/ewasm/comment_tests.sol:531:18-22"]
-	if_533 [label="if\ntests/contract_testcases/ewasm/comment_tests.sol:535:13-541:10"]
-	logical_or_534 [label="logical or\ntests/contract_testcases/ewasm/comment_tests.sol:535:20-536:55"]
-	storage_load_535 [label="storage load bool\ntests/contract_testcases/ewasm/comment_tests.sol:535:20-536:55"]
-	subscript_536 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:535:20-62"]
-	storage_var_537 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:535:20-36"]
-	cast_538 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:535:45-61"]
-	call_internal_function_539 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:535:45-61"]
-	internal_function_540 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:535:45-61"]
-	storage_load_541 [label="storage load bool\ntests/contract_testcases/ewasm/comment_tests.sol:535:20-536:55"]
-	subscript_542 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:536:16-55"]
-	storage_var_543 [label="storage variable\nTigerBNB._isExcludedFromF\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:536:16-32"]
-	variable_544 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:536:41-50"]
-	expr_545 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:538:17-539:40"]
-	call_internal_function_546 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:538:17-539:40"]
-	internal_function_547 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:538:17-539:40"]
-	variable_548 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:539:14-20"]
-	variable_549 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:539:22-31"]
-	variable_550 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:539:33-39"]
-	return_551 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:540:13-24"]
-	bool_literal_552 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:540:20-24"]
-	var_decl_553 [label="variable decl uint256 Market\ntests/contract_testcases/ewasm/comment_tests.sol:544:9-62"]
-	call_internal_function_554 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:544:26-62"]
-	internal_function_555 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/ewasm/comment_tests.sol:544:26-62"]
-	call_internal_function_556 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:544:26-53"]
-	internal_function_557 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/ewasm/comment_tests.sol:544:26-53"]
-	variable_558 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:544:26-32"]
-	storage_load_559 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:544:37-52"]
-	storage_var_560 [label="storage variable\nTigerBNB.marketingWallet\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:544:37-52"]
-	number_literal_561 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/comment_tests.sol:544:58-61"]
-	var_decl_562 [label="variable decl uint256 Burn\ntests/contract_testcases/ewasm/comment_tests.sol:545:9-50"]
-	call_internal_function_563 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:545:24-50"]
-	internal_function_564 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.div\ntests/contract_testcases/ewasm/comment_tests.sol:545:24-50"]
-	call_internal_function_565 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:545:24-41"]
-	internal_function_566 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.mul\ntests/contract_testcases/ewasm/comment_tests.sol:545:24-41"]
-	variable_567 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:545:24-30"]
-	storage_load_568 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:545:35-40"]
-	storage_var_569 [label="storage variable\nTigerBNB.deadF\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:545:35-40"]
-	number_literal_570 [label="uint256 literal: 100\ntests/contract_testcases/ewasm/comment_tests.sol:545:46-49"]
-	expr_571 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:546:13-62"]
-	call_internal_function_572 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:546:13-62"]
-	internal_function_573 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:546:13-62"]
-	variable_574 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:546:23-29"]
-	storage_load_575 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:546:39-45"]
-	storage_var_576 [label="storage variable\nTigerBNB.owners\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:546:39-45"]
-	variable_577 [label="variable: Market\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:546:51-57"]
-	expr_578 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:547:13-65"]
-	call_internal_function_579 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:547:13-65"]
-	internal_function_580 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:547:13-65"]
-	variable_581 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:547:23-29"]
-	storage_load_582 [label="storage load address\ntests/contract_testcases/ewasm/comment_tests.sol:547:39-50"]
-	storage_var_583 [label="storage variable\nTigerBNB.deadAddress\naddress storage\ntests/contract_testcases/ewasm/comment_tests.sol:547:39-50"]
-	variable_584 [label="variable: Burn\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:547:56-60"]
-	expr_585 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:548:13-103"]
-	call_internal_function_586 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:548:13-103"]
-	internal_function_587 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfer\ntests/contract_testcases/ewasm/comment_tests.sol:548:13-103"]
-	variable_588 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:548:23-29"]
-	variable_589 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:548:39-48"]
-	call_internal_function_590 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:548:54-102"]
-	internal_function_591 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:548:54-102"]
-	call_internal_function_592 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:548:54-84"]
-	internal_function_593 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:548:54-84"]
-	variable_594 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:548:54-60"]
-	variable_595 [label="variable: Market\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:548:73-79"]
-	variable_596 [label="variable: Burn\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:548:93-97"]
-	expr_597 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:552:13-559:10"]
-	call_internal_function_598 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:552:13-559:10"]
-	internal_function_599 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._approve\ntests/contract_testcases/ewasm/comment_tests.sol:552:13-559:10"]
-	variable_600 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:553:17-23"]
-	cast_601 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:554:17-29"]
-	call_internal_function_602 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:554:17-29"]
-	internal_function_603 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:554:17-29"]
-	call_internal_function_604 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:555:17-558:14"]
-	internal_function_605 [label="function(uint256,uint256,string) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:555:17-558:14"]
-	storage_load_606 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:555:17-49"]
-	subscript_607 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:555:17-49"]
-	subscript_608 [label="subscript mapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/ewasm/comment_tests.sol:555:17-35"]
-	storage_var_609 [label="storage variable\nTigerBNB._allowance\nmapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/ewasm/comment_tests.sol:555:17-27"]
-	variable_610 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:555:28-34"]
-	cast_611 [label="cast address\ntests/contract_testcases/ewasm/comment_tests.sol:555:36-48"]
-	call_internal_function_612 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:555:36-48"]
-	internal_function_613 [label="function() internal view returns (address payable)\nsignature _msgSender()\nContext._msgSender\ntests/contract_testcases/ewasm/comment_tests.sol:555:36-48"]
-	variable_614 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:556:21-27"]
-	alloc_array_615 [label="alloc array string\ninitializer: 45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365\ntests/contract_testcases/ewasm/comment_tests.sol:557:21-63"]
-	number_literal_616 [label="uint32 literal: 40\ntests/contract_testcases/ewasm/comment_tests.sol:557:21-63"]
-	return_617 [label="return\ntests/contract_testcases/ewasm/comment_tests.sol:560:9-20"]
-	bool_literal_618 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:560:16-20"]
-	approve_619 [label="function approve\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:565:5-105\nsignature approve(address,uint256,address)\nvisibility external\nmutability nonpayable"]
-	parameters_620 [label="parameters\naddress Raddress\nuint256 Pairs\naddress Max"]
-	expr_621 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:566:9-54"]
-	builtins_622 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:566:9-16"]
-	equal_623 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:566:21-48"]
-	variable_624 [label="variable: Max\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:566:21-24"]
-	number_literal_625 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:566:30-48"]
-	alloc_array_626 [label="alloc array string\ninitializer: 20\ntests/contract_testcases/ewasm/comment_tests.sol:566:50-53"]
-	number_literal_627 [label="uint32 literal: 1\ntests/contract_testcases/ewasm/comment_tests.sol:566:50-53"]
-	expr_628 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:567:13-97"]
-	assign_629 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:567:13-97"]
-	subscript_630 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:567:13-38"]
-	storage_var_631 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:567:13-20"]
-	variable_632 [label="variable: Raddress\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:567:29-37"]
-	call_internal_function_633 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:567:49-97"]
-	internal_function_634 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.add\ntests/contract_testcases/ewasm/comment_tests.sol:567:49-97"]
-	storage_load_635 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:567:49-74"]
-	subscript_636 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:567:49-74"]
-	storage_var_637 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:567:49-56"]
-	variable_638 [label="variable: Raddress\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:567:65-73"]
-	variable_639 [label="variable: Pairs\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:567:91-96"]
-	_approve [label="function _approve\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:571:5-579:7\nsignature _approve(address)\nvisibility external\nmutability nonpayable"]
-	parameters_641 [label="parameters\naddress spender"]
-	delete [label="delete\nty: bool\ntests/contract_testcases/ewasm/comment_tests.sol:581:13-583:23"]
-	subscript_643 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:582:14-583:23"]
-	storage_var_644 [label="storage variable\nTigerBNB._espat\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:582:14-20"]
-	variable_645 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:583:15-22"]
-	approve_646 [label="function approve\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:586:9-596:13\nsignature approve(address)\nvisibility external\nmutability nonpayable"]
-	parameters_647 [label="parameters\naddress spender"]
-	expr_648 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:598:13-600:13"]
-	assign_649 [label="assign\nbool storage\ntests/contract_testcases/ewasm/comment_tests.sol:598:13-600:13"]
-	subscript_650 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:598:13-599:10"]
-	storage_var_651 [label="storage variable\nTigerBNB._espat\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:598:13-19"]
-	variable_652 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:598:20-27"]
-	bool_literal_653 [label="bool literal: true\ntests/contract_testcases/ewasm/comment_tests.sol:600:9-13"]
-	_transfer [label="function _transfer\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:612:5-622:12\nsignature _transfer(address,address,uint256)\nvisibility private\nmutability nonpayable"]
-	parameters_655 [label="parameters\naddress from\naddress to\nuint256 amount"]
-	expr_656 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:625:9-626:70"]
-	builtins_657 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:625:9-16"]
-	not_658 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:626:10-28"]
-	equal_659 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:626:10-28"]
-	variable_660 [label="variable: from\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:626:10-14"]
-	number_literal_661 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:626:18-28"]
-	alloc_array_662 [label="alloc array string\ninitializer: 45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373\ntests/contract_testcases/ewasm/comment_tests.sol:626:30-69"]
-	number_literal_663 [label="uint32 literal: 37\ntests/contract_testcases/ewasm/comment_tests.sol:626:30-69"]
-	expr_664 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:627:9-628:66"]
-	builtins_665 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:627:9-16"]
-	not_666 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:628:10-26"]
-	equal_667 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:628:10-26"]
-	variable_668 [label="variable: to\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:628:10-12"]
-	number_literal_669 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:628:16-26"]
-	alloc_array_670 [label="alloc array string\ninitializer: 45524332303a207472616e7366657220746f20746865207a65726f2061646472657373\ntests/contract_testcases/ewasm/comment_tests.sol:628:28-65"]
-	number_literal_671 [label="uint32 literal: 35\ntests/contract_testcases/ewasm/comment_tests.sol:628:28-65"]
-	expr_672 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:629:9-630:66"]
-	builtins_673 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:629:9-16"]
-	more_674 [label="more\ntests/contract_testcases/ewasm/comment_tests.sol:630:10-20"]
-	variable_675 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:630:10-16"]
-	number_literal_676 [label="uint256 literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:630:19-20"]
-	alloc_array_677 [label="alloc array string\ninitializer: 5472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f\ntests/contract_testcases/ewasm/comment_tests.sol:630:22-65"]
-	number_literal_678 [label="uint32 literal: 41\ntests/contract_testcases/ewasm/comment_tests.sol:630:22-65"]
-	if_679 [label="if\ntests/contract_testcases/ewasm/comment_tests.sol:634:9-642:10"]
-	storage_load_680 [label="storage load bool\ntests/contract_testcases/ewasm/comment_tests.sol:635:10-16"]
-	storage_var_681 [label="storage variable\nTigerBNB.ratify\nbool storage\ntests/contract_testcases/ewasm/comment_tests.sol:635:10-16"]
-	expr_682 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:638:13-641:20"]
-	builtins_683 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:638:13-20"]
-	equal_684 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:639:18-640:21"]
-	storage_load_685 [label="storage load bool\ntests/contract_testcases/ewasm/comment_tests.sol:639:18-30"]
-	subscript_686 [label="subscript mapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:639:18-30"]
-	storage_var_687 [label="storage variable\nTigerBNB._espat\nmapping(address => bool) storage\ntests/contract_testcases/ewasm/comment_tests.sol:639:18-24"]
-	variable_688 [label="variable: from\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:639:25-29"]
-	bool_literal_689 [label="bool literal: false\ntests/contract_testcases/ewasm/comment_tests.sol:640:16-21"]
-	alloc_array_690 [label="alloc array string\ninitializer: 6f6b6a69\ntests/contract_testcases/ewasm/comment_tests.sol:641:13-19"]
-	number_literal_691 [label="uint32 literal: 4\ntests/contract_testcases/ewasm/comment_tests.sol:641:13-19"]
-	expr_692 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:643:9-37"]
-	call_internal_function_693 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:643:9-37"]
-	internal_function_694 [label="function(address,address,uint256) internal returns (void)\nTigerBNB._transfers\ntests/contract_testcases/ewasm/comment_tests.sol:643:9-37"]
-	variable_695 [label="variable: from\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:643:20-24"]
-	variable_696 [label="variable: to\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:643:26-28"]
-	variable_697 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:643:30-36"]
-	_transfers [label="function _transfers\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:648:5-654:12\nsignature _transfers(address,address,uint256)\nvisibility private\nmutability nonpayable"]
-	parameters_699 [label="parameters\naddress sender\naddress recipient\nuint256 tAmount"]
-	expr_700 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:656:9-80"]
-	builtins_701 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:656:9-16"]
-	not_702 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:656:17-37"]
-	equal_703 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:656:17-37"]
-	variable_704 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:656:17-23"]
-	number_literal_705 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:656:27-37"]
-	alloc_array_706 [label="alloc array string\ninitializer: 4942455032303a207472616e736665722066726f6d20746865207a65726f2061646472657373\ntests/contract_testcases/ewasm/comment_tests.sol:656:39-79"]
-	number_literal_707 [label="uint32 literal: 38\ntests/contract_testcases/ewasm/comment_tests.sol:656:39-79"]
-	expr_708 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:657:9-81"]
-	builtins_709 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:657:9-16"]
-	not_710 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:657:17-40"]
-	equal_711 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:657:17-40"]
-	variable_712 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:657:17-26"]
-	number_literal_713 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:657:30-40"]
-	alloc_array_714 [label="alloc array string\ninitializer: 4942455032303a207472616e7366657220746f20746865207a65726f2061646472657373\ntests/contract_testcases/ewasm/comment_tests.sol:657:42-80"]
-	number_literal_715 [label="uint32 literal: 36\ntests/contract_testcases/ewasm/comment_tests.sol:657:42-80"]
-	expr_716 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:658:13-59"]
-	assign_717 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:658:13-59"]
-	subscript_718 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:658:13-28"]
-	storage_var_719 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:658:13-20"]
-	variable_720 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:658:21-27"]
-	call_internal_function_721 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:658:31-59"]
-	internal_function_722 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.sub\ntests/contract_testcases/ewasm/comment_tests.sol:658:31-59"]
-	storage_load_723 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:658:31-46"]
-	subscript_724 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:658:31-46"]
-	storage_var_725 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:658:31-38"]
-	variable_726 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:658:39-45"]
-	variable_727 [label="variable: tAmount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:658:51-58"]
-	expr_728 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:659:9-61"]
-	assign_729 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:659:9-61"]
-	subscript_730 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:659:9-27"]
-	storage_var_731 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:659:9-16"]
-	variable_732 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:659:17-26"]
-	call_internal_function_733 [label="call internal function\ntests/contract_testcases/ewasm/comment_tests.sol:659:30-61"]
-	internal_function_734 [label="function(uint256,uint256) internal pure returns (uint256)\nSafeMath.add\ntests/contract_testcases/ewasm/comment_tests.sol:659:30-61"]
-	storage_load_735 [label="storage load uint256\ntests/contract_testcases/ewasm/comment_tests.sol:659:30-48"]
-	subscript_736 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:659:30-48"]
-	storage_var_737 [label="storage variable\nTigerBNB._lances\nmapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:659:30-37"]
-	variable_738 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:659:38-47"]
-	variable_739 [label="variable: tAmount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:659:53-60"]
-	emit_740 [label="emit\nevent IERC20.Transfer\ntests/contract_testcases/ewasm/comment_tests.sol:660:13-58"]
-	variable_741 [label="variable: sender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:660:31-37"]
-	variable_742 [label="variable: recipient\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:660:39-48"]
-	variable_743 [label="variable: tAmount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:660:50-57"]
-	_approve_744 [label="function _approve\ncontract: TigerBNB\ntests/contract_testcases/ewasm/comment_tests.sol:667:1-672:14\nsignature _approve(address,address,uint256)\nvisibility private\nmutability nonpayable"]
-	parameters_745 [label="parameters\naddress owner\naddress spender\nuint256 amount"]
-	expr_746 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:673:9-77"]
-	builtins_747 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:673:9-16"]
-	not_748 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:673:17-36"]
-	equal_749 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:673:17-36"]
-	variable_750 [label="variable: owner\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:673:17-22"]
-	number_literal_751 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:673:26-36"]
-	alloc_array_752 [label="alloc array string\ninitializer: 45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373\ntests/contract_testcases/ewasm/comment_tests.sol:673:38-76"]
-	number_literal_753 [label="uint32 literal: 36\ntests/contract_testcases/ewasm/comment_tests.sol:673:38-76"]
-	expr_754 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:674:9-77"]
-	builtins_755 [label="builtin Require\ntests/contract_testcases/ewasm/comment_tests.sol:674:9-16"]
-	not_756 [label="not\ntests/contract_testcases/ewasm/comment_tests.sol:674:17-38"]
-	equal_757 [label="equal\ntests/contract_testcases/ewasm/comment_tests.sol:674:17-38"]
-	variable_758 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:674:17-24"]
-	number_literal_759 [label="address literal: 0\ntests/contract_testcases/ewasm/comment_tests.sol:674:28-38"]
-	alloc_array_760 [label="alloc array string\ninitializer: 45524332303a20617070726f766520746f20746865207a65726f2061646472657373\ntests/contract_testcases/ewasm/comment_tests.sol:674:40-76"]
-	number_literal_761 [label="uint32 literal: 34\ntests/contract_testcases/ewasm/comment_tests.sol:674:40-76"]
-	expr_762 [label="expression\ntests/contract_testcases/ewasm/comment_tests.sol:675:9-44"]
-	assign_763 [label="assign\nuint256 storage\ntests/contract_testcases/ewasm/comment_tests.sol:675:9-44"]
-	subscript_764 [label="subscript mapping(address => uint256) storage\ntests/contract_testcases/ewasm/comment_tests.sol:675:9-35"]
-	subscript_765 [label="subscript mapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/ewasm/comment_tests.sol:675:9-26"]
-	storage_var_766 [label="storage variable\nTigerBNB._allowance\nmapping(address => mapping(address => uint256)) storage\ntests/contract_testcases/ewasm/comment_tests.sol:675:9-19"]
-	variable_767 [label="variable: owner\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:675:20-25"]
-	variable_768 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:675:27-34"]
-	variable_769 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:675:38-44"]
-	emit_770 [label="emit\nevent IERC20.Approval\ntests/contract_testcases/ewasm/comment_tests.sol:676:9-46"]
-	variable_771 [label="variable: owner\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:676:23-28"]
-	variable_772 [label="variable: spender\naddress\ntests/contract_testcases/ewasm/comment_tests.sol:676:30-37"]
-	variable_773 [label="variable: amount\nuint256\ntests/contract_testcases/ewasm/comment_tests.sol:676:39-45"]
-	diagnostic [label="pragma 'solidity' is ignored\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:10:3-11:24"]
-	diagnostic_776 [label="found interface 'IERC20'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:16:5-66:2"]
-	diagnostic_777 [label="found library 'SafeMath'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:71:1-151:2"]
-	diagnostic_778 [label="found abstract contract 'Context'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:152:1-166:2"]
-	diagnostic_779 [label="found library 'Address'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:168:1-300:2"]
-	diagnostic_780 [label="builtin 'extcodehash' is not available for target ewasm. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:182:25-45"]
-	diagnostic_781 [label="conversion truncates uint256 to uint128, as value is type uint128 on target ewasm\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:195:50-56"]
-	diagnostic_782 [label="conversion truncates uint256 to uint128, as value is type uint128 on target ewasm\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:276:70-78"]
-	diagnostic_783 [label="builtin 'mload' is not available for target ewasm. Please, open a GitHub issue at https://github.com/hyperledger-labs/solang/issues if there is need to support this function\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:288:44-61"]
-	diagnostic_784 [label="missing return statement\nlevel Error\ntests/contract_testcases/ewasm/comment_tests.sol:299:6"]
-	diagnostic_785 [label="found contract 'Ownable'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:302:1-373:2"]
-	diagnostic_786 [label="'internal': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:321:9-17"]
-	diagnostic_787 [label="found contract 'TigerBNB'\nlevel Debug\ntests/contract_testcases/ewasm/comment_tests.sol:374:1-679:2"]
-	diagnostic_788 [label="'public': visibility for constructors is ignored\nlevel Warning\ntests/contract_testcases/ewasm/comment_tests.sol:417:5-11"]
-	events -> Transfer
-	events -> Approval
-	events -> OwnershipTransferred
-	contracts -> contract
-	contract -> balanceOf [label="function"]
-	balanceOf -> parameters [label="parameters"]
-	balanceOf -> returns [label="returns"]
-	contract -> totalSupply [label="function"]
-	totalSupply -> returns_10 [label="returns"]
-	contract -> transfer [label="function"]
-	transfer -> parameters_12 [label="parameters"]
-	transfer -> returns_13 [label="returns"]
-	contract -> allowance [label="function"]
-	allowance -> parameters_15 [label="parameters"]
-	allowance -> returns_16 [label="returns"]
-	contract -> approve [label="function"]
-	approve -> parameters_18 [label="parameters"]
-	approve -> returns_19 [label="returns"]
-	contract -> transferFrom [label="function"]
-	transferFrom -> parameters_21 [label="parameters"]
-	transferFrom -> returns_22 [label="returns"]
-	contracts -> contract_23
-	contract_23 -> add [label="function"]
-	add -> parameters_25 [label="parameters"]
-	add -> returns_26 [label="returns"]
-	add -> var_decl [label="body"]
-	var_decl -> add_28 [label="init"]
-	add_28 -> variable [label="left"]
-	add_28 -> variable_30 [label="right"]
-	var_decl -> expr [label="next"]
-	expr -> builtins [label="expr"]
-	builtins -> more_equal [label="arg #0"]
-	more_equal -> variable_34 [label="left"]
-	more_equal -> variable_35 [label="right"]
-	builtins -> alloc_array [label="arg #1"]
-	alloc_array -> number_literal [label="length"]
-	expr -> return [label="next"]
-	return -> variable_39 [label="expr"]
-	contract_23 -> sub [label="function"]
-	sub -> parameters_41 [label="parameters"]
-	sub -> returns_42 [label="returns"]
-	sub -> return_43 [label="body"]
-	return_43 -> call_internal_function [label="expr"]
-	call_internal_function -> internal_function [label="function"]
-	call_internal_function -> variable_46 [label="arg #0"]
-	call_internal_function -> variable_47 [label="arg #1"]
-	call_internal_function -> alloc_array_48 [label="arg #2"]
-	alloc_array_48 -> number_literal_49 [label="length"]
-	contract_23 -> sub_50 [label="function"]
-	sub_50 -> parameters_51 [label="parameters"]
-	sub_50 -> returns_52 [label="returns"]
-	sub_50 -> expr_53 [label="body"]
-	expr_53 -> builtins_54 [label="expr"]
-	builtins_54 -> less_equal [label="arg #0"]
-	less_equal -> variable_56 [label="left"]
-	less_equal -> variable_57 [label="right"]
-	builtins_54 -> variable_58 [label="arg #1"]
-	expr_53 -> var_decl_59 [label="next"]
-	var_decl_59 -> subtract [label="init"]
-	subtract -> variable_61 [label="left"]
-	subtract -> variable_62 [label="right"]
-	var_decl_59 -> return_63 [label="next"]
-	return_63 -> variable_64 [label="expr"]
-	contract_23 -> mul [label="function"]
-	mul -> parameters_66 [label="parameters"]
-	mul -> returns_67 [label="returns"]
-	mul -> if [label="body"]
-	if -> equal [label="cond"]
-	equal -> variable_70 [label="left"]
-	equal -> number_literal_71 [label="right"]
-	if -> return_72 [label="then"]
-	return_72 -> number_literal_73 [label="expr"]
-	if -> var_decl_74 [label="next"]
-	var_decl_74 -> multiply [label="init"]
-	multiply -> variable_76 [label="left"]
-	multiply -> variable_77 [label="right"]
-	var_decl_74 -> expr_78 [label="next"]
-	expr_78 -> builtins_79 [label="expr"]
-	builtins_79 -> equal_80 [label="arg #0"]
-	equal_80 -> divide [label="left"]
-	divide -> variable_82 [label="left"]
-	divide -> variable_83 [label="right"]
-	equal_80 -> variable_84 [label="right"]
-	builtins_79 -> alloc_array_85 [label="arg #1"]
-	alloc_array_85 -> number_literal_86 [label="length"]
-	expr_78 -> return_87 [label="next"]
-	return_87 -> variable_88 [label="expr"]
-	contract_23 -> div [label="function"]
-	div -> parameters_90 [label="parameters"]
-	div -> returns_91 [label="returns"]
-	div -> return_92 [label="body"]
-	return_92 -> call_internal_function_93 [label="expr"]
-	call_internal_function_93 -> internal_function_94 [label="function"]
-	call_internal_function_93 -> variable_95 [label="arg #0"]
-	call_internal_function_93 -> variable_96 [label="arg #1"]
-	call_internal_function_93 -> alloc_array_97 [label="arg #2"]
-	alloc_array_97 -> number_literal_98 [label="length"]
-	contract_23 -> div_99 [label="function"]
-	div_99 -> parameters_100 [label="parameters"]
-	div_99 -> returns_101 [label="returns"]
-	div_99 -> expr_102 [label="body"]
-	expr_102 -> builtins_103 [label="expr"]
-	builtins_103 -> more [label="arg #0"]
-	more -> variable_105 [label="left"]
-	more -> number_literal_106 [label="right"]
-	builtins_103 -> variable_107 [label="arg #1"]
-	expr_102 -> var_decl_108 [label="next"]
-	var_decl_108 -> divide_109 [label="init"]
-	divide_109 -> variable_110 [label="left"]
-	divide_109 -> variable_111 [label="right"]
-	var_decl_108 -> return_112 [label="next"]
-	return_112 -> variable_113 [label="expr"]
-	contract_23 -> Mdos [label="function"]
-	Mdos -> parameters_115 [label="parameters"]
-	Mdos -> returns_116 [label="returns"]
-	Mdos -> return_117 [label="body"]
-	return_117 -> call_internal_function_118 [label="expr"]
-	call_internal_function_118 -> internal_function_119 [label="function"]
-	call_internal_function_118 -> variable_120 [label="arg #0"]
-	call_internal_function_118 -> variable_121 [label="arg #1"]
-	call_internal_function_118 -> alloc_array_122 [label="arg #2"]
-	alloc_array_122 -> number_literal_123 [label="length"]
-	contract_23 -> Mdos_124 [label="function"]
-	Mdos_124 -> parameters_125 [label="parameters"]
-	Mdos_124 -> returns_126 [label="returns"]
-	Mdos_124 -> expr_127 [label="body"]
-	expr_127 -> builtins_128 [label="expr"]
-	builtins_128 -> not [label="arg #0"]
-	not -> equal_130 [label="expr"]
-	equal_130 -> variable_131 [label="left"]
-	equal_130 -> number_literal_132 [label="right"]
-	builtins_128 -> variable_133 [label="arg #1"]
-	expr_127 -> return_134 [label="next"]
-	return_134 -> modulo [label="expr"]
-	modulo -> variable_136 [label="left"]
-	modulo -> variable_137 [label="right"]
-	contracts -> contract_138
-	contract_138 -> _msgSender [label="function"]
-	_msgSender -> returns_140 [label="returns"]
-	_msgSender -> return_141 [label="body"]
-	return_141 -> builtins_142 [label="expr"]
-	contract_138 -> _msgData [label="function"]
-	_msgData -> returns_144 [label="returns"]
-	_msgData -> expr_145 [label="body"]
-	expr_145 -> builtins_146 [label="expr"]
-	expr_145 -> return_147 [label="next"]
-	return_147 -> builtins_148 [label="expr"]
-	contracts -> contract_149
-	contract_149 -> isContract [label="function"]
-	isContract -> parameters_151 [label="parameters"]
-	isContract -> returns_152 [label="returns"]
-	isContract -> var_decl_153 [label="body"]
-	var_decl_153 -> var_decl_154 [label="next"]
-	var_decl_154 -> number_literal_155 [label="init"]
-	var_decl_154 -> inline_assembly [label="next"]
-	inline_assembly -> return_157 [label="next"]
-	return_157 -> logical_and [label="expr"]
-	logical_and -> not_159 [label="left"]
-	not_159 -> equal_160 [label="expr"]
-	equal_160 -> variable_161 [label="left"]
-	equal_160 -> variable_162 [label="right"]
-	logical_and -> not_163 [label="right"]
-	not_163 -> equal_164 [label="expr"]
-	equal_164 -> variable_165 [label="left"]
-	equal_164 -> number_literal_166 [label="right"]
-	contract_149 -> sendValue [label="function"]
-	sendValue -> parameters_168 [label="parameters"]
-	sendValue -> expr_169 [label="body"]
-	expr_169 -> builtins_170 [label="expr"]
-	builtins_170 -> more_equal_171 [label="arg #0"]
-	more_equal_171 -> sign_ext [label="left"]
-	sign_ext -> builtins_173 [label="expr"]
-	builtins_173 -> cast [label="arg #0"]
-	cast -> builtins_175 [label="expr"]
-	more_equal_171 -> variable_176 [label="right"]
-	builtins_170 -> alloc_array_177 [label="arg #1"]
-	alloc_array_177 -> number_literal_178 [label="length"]
-	expr_169 -> destructure [label="next"]
-	destructure -> param [label="arg #0"]
-	destructure -> none [label="arg #1"]
-	destructure -> call_external_function [label="expr"]
-	call_external_function -> variable_183 [label="address"]
-	call_external_function -> alloc_array_184 [label="args"]
-	alloc_array_184 -> number_literal_185 [label="length"]
-	call_external_function -> trunc [label="value"]
-	trunc -> variable_187 [label="expr"]
-	destructure -> expr_188 [label="next"]
-	expr_188 -> builtins_189 [label="expr"]
-	builtins_189 -> variable_190 [label="arg #0"]
-	builtins_189 -> alloc_array_191 [label="arg #1"]
-	alloc_array_191 -> number_literal_192 [label="length"]
-	contract_149 -> functionCall [label="function"]
-	functionCall -> parameters_194 [label="parameters"]
-	functionCall -> returns_195 [label="returns"]
-	functionCall -> return_196 [label="body"]
-	return_196 -> call_internal_function_197 [label="expr"]
-	call_internal_function_197 -> internal_function_198 [label="function"]
-	call_internal_function_197 -> variable_199 [label="arg #0"]
-	call_internal_function_197 -> variable_200 [label="arg #1"]
-	call_internal_function_197 -> alloc_array_201 [label="arg #2"]
-	alloc_array_201 -> number_literal_202 [label="length"]
-	contract_149 -> functionCall_203 [label="function"]
-	functionCall_203 -> parameters_204 [label="parameters"]
-	functionCall_203 -> returns_205 [label="returns"]
-	functionCall_203 -> return_206 [label="body"]
-	return_206 -> call_internal_function_207 [label="expr"]
-	call_internal_function_207 -> internal_function_208 [label="function"]
-	call_internal_function_207 -> variable_209 [label="arg #0"]
-	call_internal_function_207 -> variable_210 [label="arg #1"]
-	call_internal_function_207 -> number_literal_211 [label="arg #2"]
-	call_internal_function_207 -> variable_212 [label="arg #3"]
-	contract_149 -> functionCallWithValue [label="function"]
-	functionCallWithValue -> parameters_214 [label="parameters"]
-	functionCallWithValue -> returns_215 [label="returns"]
-	functionCallWithValue -> return_216 [label="body"]
-	return_216 -> call_internal_function_217 [label="expr"]
-	call_internal_function_217 -> internal_function_218 [label="function"]
-	call_internal_function_217 -> variable_219 [label="arg #0"]
-	call_internal_function_217 -> variable_220 [label="arg #1"]
-	call_internal_function_217 -> variable_221 [label="arg #2"]
-	call_internal_function_217 -> alloc_array_222 [label="arg #3"]
-	alloc_array_222 -> number_literal_223 [label="length"]
-	contract_149 -> functionCallWithValue_224 [label="function"]
-	functionCallWithValue_224 -> parameters_225 [label="parameters"]
-	functionCallWithValue_224 -> returns_226 [label="returns"]
-	functionCallWithValue_224 -> expr_227 [label="body"]
-	expr_227 -> builtins_228 [label="expr"]
-	builtins_228 -> more_equal_229 [label="arg #0"]
-	more_equal_229 -> sign_ext_230 [label="left"]
-	sign_ext_230 -> builtins_231 [label="expr"]
-	builtins_231 -> cast_232 [label="arg #0"]
-	cast_232 -> builtins_233 [label="expr"]
-	more_equal_229 -> variable_234 [label="right"]
-	builtins_228 -> alloc_array_235 [label="arg #1"]
-	alloc_array_235 -> number_literal_236 [label="length"]
-	expr_227 -> return_237 [label="next"]
-	return_237 -> call_internal_function_238 [label="expr"]
-	call_internal_function_238 -> internal_function_239 [label="function"]
-	call_internal_function_238 -> variable_240 [label="arg #0"]
-	call_internal_function_238 -> variable_241 [label="arg #1"]
-	call_internal_function_238 -> variable_242 [label="arg #2"]
-	call_internal_function_238 -> variable_243 [label="arg #3"]
-	contract_149 -> _functionCallWithValue [label="function"]
-	_functionCallWithValue -> parameters_245 [label="parameters"]
-	_functionCallWithValue -> returns_246 [label="returns"]
-	contracts -> contract_247
-	contract_247 -> base [label="base"]
-	contract_247 -> var [label="variable"]
-	contract_247 -> var_250 [label="variable"]
-	contract_247 -> var_251 [label="variable"]
-	var_251 -> number_literal_252 [label="initializer"]
-	contract_247 -> node_253 [label="constructor"]
-	node_253 -> var_decl_254 [label="body"]
-	var_decl_254 -> cast_255 [label="init"]
-	cast_255 -> call_internal_function_256 [label="expr"]
-	call_internal_function_256 -> internal_function_257 [label="function"]
-	var_decl_254 -> expr_258 [label="next"]
-	expr_258 -> assign [label="expr"]
-	assign -> storage_var [label="left"]
-	assign -> variable_261 [label="right"]
-	expr_258 -> emit [label="next"]
-	emit -> number_literal_263 [label="arg #0"]
-	emit -> variable_264 [label="arg #1"]
-	contract_247 -> owner [label="function"]
-	owner -> returns_266 [label="returns"]
-	owner -> return_267 [label="body"]
-	return_267 -> storage_load [label="expr"]
-	storage_load -> storage_var_269 [label="expr"]
-	contract_247 -> onlyOwner [label="modifier"]
-	onlyOwner -> expr_271 [label="body"]
-	expr_271 -> builtins_272 [label="expr"]
-	builtins_272 -> equal_273 [label="arg #0"]
-	equal_273 -> storage_load_274 [label="left"]
-	storage_load_274 -> storage_var_275 [label="expr"]
-	equal_273 -> cast_276 [label="right"]
-	cast_276 -> call_internal_function_277 [label="expr"]
-	call_internal_function_277 -> internal_function_278 [label="function"]
-	builtins_272 -> alloc_array_279 [label="arg #1"]
-	alloc_array_279 -> number_literal_280 [label="length"]
-	expr_271 -> underscore [label="next"]
-	contract_247 -> onlyOwners [label="modifier"]
-	onlyOwners -> expr_283 [label="body"]
-	expr_283 -> builtins_284 [label="expr"]
-	builtins_284 -> equal_285 [label="arg #0"]
-	equal_285 -> storage_load_286 [label="left"]
-	storage_load_286 -> storage_var_287 [label="expr"]
-	equal_285 -> cast_288 [label="right"]
-	cast_288 -> call_internal_function_289 [label="expr"]
-	call_internal_function_289 -> internal_function_290 [label="function"]
-	expr_283 -> underscore_291 [label="next"]
-	contract_247 -> transfer_292 [label="function"]
-	transfer_292 -> parameters_293 [label="parameters"]
-	transfer_292 -> expr_294 [label="body"]
-	expr_294 -> builtins_295 [label="expr"]
-	builtins_295 -> equal_296 [label="arg #0"]
-	equal_296 -> variable_297 [label="left"]
-	equal_296 -> number_literal_298 [label="right"]
-	builtins_295 -> alloc_array_299 [label="arg #1"]
-	alloc_array_299 -> number_literal_300 [label="length"]
-	expr_294 -> expr_301 [label="next"]
-	expr_301 -> assign_302 [label="expr"]
-	assign_302 -> storage_var_303 [label="left"]
-	assign_302 -> variable_304 [label="right"]
-	contract_247 -> renounceOwnership [label="function"]
-	renounceOwnership -> expr_306 [label="body"]
-	expr_306 -> assign_307 [label="expr"]
-	assign_307 -> storage_var_308 [label="left"]
-	assign_307 -> storage_load_309 [label="right"]
-	storage_load_309 -> storage_var_310 [label="expr"]
-	contracts -> contract_311
-	contract_311 -> base_312 [label="base"]
-	contract_311 -> base_313 [label="base"]
-	contract_311 -> base_314 [label="base"]
-	contract_311 -> var_315 [label="variable"]
-	contract_311 -> var_316 [label="variable"]
-	contract_311 -> var_317 [label="variable"]
-	contract_311 -> var_318 [label="variable"]
-	contract_311 -> var_319 [label="variable"]
-	contract_311 -> var_320 [label="variable"]
-	var_320 -> complement [label="initializer"]
-	complement -> number_literal_322 [label="expr"]
-	contract_311 -> var_323 [label="variable"]
-	var_323 -> multiply_324 [label="initializer"]
-	multiply_324 -> number_literal_325 [label="left"]
-	multiply_324 -> power [label="right"]
-	power -> number_literal_327 [label="left"]
-	power -> number_literal_328 [label="right"]
-	contract_311 -> var_329 [label="variable"]
-	var_329 -> number_literal_330 [label="initializer"]
-	contract_311 -> var_331 [label="variable"]
-	var_331 -> number_literal_332 [label="initializer"]
-	contract_311 -> var_333 [label="variable"]
-	var_333 -> number_literal_334 [label="initializer"]
-	contract_311 -> var_335 [label="variable"]
-	var_335 -> bool_literal [label="initializer"]
-	contract_311 -> var_337 [label="variable"]
-	var_337 -> number_literal_338 [label="initializer"]
-	contract_311 -> var_339 [label="variable"]
-	contract_311 -> var_340 [label="variable"]
-	contract_311 -> var_341 [label="variable"]
-	contract_311 -> var_342 [label="variable"]
-	contract_311 -> var_343 [label="variable"]
-	contract_311 -> var_344 [label="variable"]
-	contract_311 -> using [label="base"]
-	contract_311 -> using_346 [label="base"]
-	contract_311 -> node_347 [label="constructor"]
-	node_347 -> expr_348 [label="body"]
-	expr_348 -> assign_349 [label="expr"]
-	assign_349 -> storage_var_350 [label="left"]
-	assign_349 -> cast_351 [label="right"]
-	cast_351 -> call_internal_function_352 [label="expr"]
-	call_internal_function_352 -> internal_function_353 [label="function"]
-	expr_348 -> expr_354 [label="next"]
-	expr_354 -> assign_355 [label="expr"]
-	assign_355 -> subscript [label="left"]
-	subscript -> storage_var_357 [label="array"]
-	subscript -> cast_358 [label="index"]
-	cast_358 -> call_internal_function_359 [label="expr"]
-	call_internal_function_359 -> internal_function_360 [label="function"]
-	assign_355 -> storage_load_361 [label="right"]
-	storage_load_361 -> storage_var_362 [label="expr"]
-	expr_354 -> expr_363 [label="next"]
-	expr_363 -> assign_364 [label="expr"]
-	assign_364 -> storage_var_365 [label="left"]
-	assign_364 -> number_literal_366 [label="right"]
-	expr_363 -> expr_367 [label="next"]
-	expr_367 -> assign_368 [label="expr"]
-	assign_368 -> storage_var_369 [label="left"]
-	assign_368 -> alloc_array_370 [label="right"]
-	alloc_array_370 -> number_literal_371 [label="length"]
-	expr_367 -> expr_372 [label="next"]
-	expr_372 -> assign_373 [label="expr"]
-	assign_373 -> storage_var_374 [label="left"]
-	assign_373 -> alloc_array_375 [label="right"]
-	alloc_array_375 -> number_literal_376 [label="length"]
-	expr_372 -> expr_377 [label="next"]
-	expr_377 -> assign_378 [label="expr"]
-	assign_378 -> subscript_379 [label="left"]
-	subscript_379 -> storage_var_380 [label="array"]
-	subscript_379 -> call_internal_function_381 [label="index"]
-	call_internal_function_381 -> internal_function_382 [label="function"]
-	assign_378 -> bool_literal_383 [label="right"]
-	expr_377 -> expr_384 [label="next"]
-	expr_384 -> assign_385 [label="expr"]
-	assign_385 -> subscript_386 [label="left"]
-	subscript_386 -> storage_var_387 [label="array"]
-	subscript_386 -> cast_388 [label="index"]
-	cast_388 -> builtins_389 [label="expr"]
-	assign_385 -> bool_literal_390 [label="right"]
-	expr_384 -> emit_391 [label="next"]
-	emit_391 -> number_literal_392 [label="arg #0"]
-	emit_391 -> cast_393 [label="arg #1"]
-	cast_393 -> call_internal_function_394 [label="expr"]
-	call_internal_function_394 -> internal_function_395 [label="function"]
-	emit_391 -> storage_load_396 [label="arg #2"]
-	storage_load_396 -> storage_var_397 [label="expr"]
-	contract_311 -> name [label="function"]
-	name -> returns_399 [label="returns"]
-	name -> return_400 [label="body"]
-	return_400 -> storage_load_401 [label="expr"]
-	storage_load_401 -> storage_var_402 [label="expr"]
-	contract_311 -> symbol [label="function"]
-	symbol -> returns_404 [label="returns"]
-	symbol -> return_405 [label="body"]
-	return_405 -> storage_load_406 [label="expr"]
-	storage_load_406 -> storage_var_407 [label="expr"]
-	contract_311 -> decimals [label="function"]
-	decimals -> returns_409 [label="returns"]
-	decimals -> return_410 [label="body"]
-	return_410 -> storage_load_411 [label="expr"]
-	storage_load_411 -> storage_var_412 [label="expr"]
-	contract_311 -> balanceOf_413 [label="function"]
-	balanceOf_413 -> parameters_414 [label="parameters"]
-	balanceOf_413 -> returns_415 [label="returns"]
-	balanceOf_413 -> return_416 [label="body"]
-	return_416 -> storage_load_417 [label="expr"]
-	storage_load_417 -> subscript_418 [label="expr"]
-	subscript_418 -> storage_var_419 [label="array"]
-	subscript_418 -> variable_420 [label="index"]
-	contract_311 -> totalSupply_421 [label="function"]
-	totalSupply_421 -> returns_422 [label="returns"]
-	totalSupply_421 -> return_423 [label="body"]
-	return_423 -> storage_load_424 [label="expr"]
-	storage_load_424 -> storage_var_425 [label="expr"]
-	contract_311 -> transfer_426 [label="function"]
-	transfer_426 -> parameters_427 [label="parameters"]
-	transfer_426 -> returns_428 [label="returns"]
-	transfer_426 -> if_429 [label="body"]
-	if_429 -> logical_or [label="cond"]
-	logical_or -> storage_load_431 [label="left"]
-	storage_load_431 -> subscript_432 [label="expr"]
-	subscript_432 -> storage_var_433 [label="array"]
-	subscript_432 -> cast_434 [label="index"]
-	cast_434 -> call_internal_function_435 [label="expr"]
-	call_internal_function_435 -> internal_function_436 [label="function"]
-	logical_or -> storage_load_437 [label="right"]
-	storage_load_437 -> subscript_438 [label="expr"]
-	subscript_438 -> storage_var_439 [label="array"]
-	subscript_438 -> variable_440 [label="index"]
-	if_429 -> expr_441 [label="then"]
-	expr_441 -> call_internal_function_442 [label="expr"]
-	call_internal_function_442 -> internal_function_443 [label="function"]
-	call_internal_function_442 -> cast_444 [label="arg #0"]
-	cast_444 -> call_internal_function_445 [label="expr"]
-	call_internal_function_445 -> internal_function_446 [label="function"]
-	call_internal_function_442 -> variable_447 [label="arg #1"]
-	call_internal_function_442 -> variable_448 [label="arg #2"]
-	expr_441 -> return_449 [label="next"]
-	return_449 -> bool_literal_450 [label="expr"]
-	if_429 -> var_decl_451 [label="next"]
-	var_decl_451 -> call_internal_function_452 [label="init"]
-	call_internal_function_452 -> internal_function_453 [label="function"]
-	call_internal_function_452 -> call_internal_function_454 [label="arg #0"]
-	call_internal_function_454 -> internal_function_455 [label="function"]
-	call_internal_function_454 -> variable_456 [label="arg #0"]
-	call_internal_function_454 -> storage_load_457 [label="arg #1"]
-	storage_load_457 -> storage_var_458 [label="expr"]
-	call_internal_function_452 -> number_literal_459 [label="arg #1"]
-	var_decl_451 -> var_decl_460 [label="next"]
-	var_decl_460 -> call_internal_function_461 [label="init"]
-	call_internal_function_461 -> internal_function_462 [label="function"]
-	call_internal_function_461 -> call_internal_function_463 [label="arg #0"]
-	call_internal_function_463 -> internal_function_464 [label="function"]
-	call_internal_function_463 -> variable_465 [label="arg #0"]
-	call_internal_function_463 -> storage_load_466 [label="arg #1"]
-	storage_load_466 -> storage_var_467 [label="expr"]
-	call_internal_function_461 -> number_literal_468 [label="arg #1"]
-	var_decl_460 -> expr_469 [label="next"]
-	expr_469 -> call_internal_function_470 [label="expr"]
-	call_internal_function_470 -> internal_function_471 [label="function"]
-	call_internal_function_470 -> cast_472 [label="arg #0"]
-	cast_472 -> call_internal_function_473 [label="expr"]
-	call_internal_function_473 -> internal_function_474 [label="function"]
-	call_internal_function_470 -> storage_load_475 [label="arg #1"]
-	storage_load_475 -> storage_var_476 [label="expr"]
-	call_internal_function_470 -> variable_477 [label="arg #2"]
-	expr_469 -> expr_478 [label="next"]
-	expr_478 -> call_internal_function_479 [label="expr"]
-	call_internal_function_479 -> internal_function_480 [label="function"]
-	call_internal_function_479 -> cast_481 [label="arg #0"]
-	cast_481 -> call_internal_function_482 [label="expr"]
-	call_internal_function_482 -> internal_function_483 [label="function"]
-	call_internal_function_479 -> storage_load_484 [label="arg #1"]
-	storage_load_484 -> storage_var_485 [label="expr"]
-	call_internal_function_479 -> variable_486 [label="arg #2"]
-	expr_478 -> expr_487 [label="next"]
-	expr_487 -> call_internal_function_488 [label="expr"]
-	call_internal_function_488 -> internal_function_489 [label="function"]
-	call_internal_function_488 -> cast_490 [label="arg #0"]
-	cast_490 -> call_internal_function_491 [label="expr"]
-	call_internal_function_491 -> internal_function_492 [label="function"]
-	call_internal_function_488 -> variable_493 [label="arg #1"]
-	call_internal_function_488 -> call_internal_function_494 [label="arg #2"]
-	call_internal_function_494 -> internal_function_495 [label="function"]
-	call_internal_function_494 -> call_internal_function_496 [label="arg #0"]
-	call_internal_function_496 -> internal_function_497 [label="function"]
-	call_internal_function_496 -> variable_498 [label="arg #0"]
-	call_internal_function_496 -> variable_499 [label="arg #1"]
-	call_internal_function_494 -> variable_500 [label="arg #1"]
-	expr_487 -> return_501 [label="next"]
-	return_501 -> bool_literal_502 [label="expr"]
-	contract_311 -> allowance_503 [label="function"]
-	allowance_503 -> parameters_504 [label="parameters"]
-	allowance_503 -> returns_505 [label="returns"]
-	allowance_503 -> return_506 [label="body"]
-	return_506 -> storage_load_507 [label="expr"]
-	storage_load_507 -> subscript_508 [label="expr"]
-	subscript_508 -> subscript_509 [label="array"]
-	subscript_509 -> storage_var_510 [label="array"]
-	subscript_509 -> variable_511 [label="index"]
-	subscript_508 -> variable_512 [label="index"]
-	contract_311 -> approve_513 [label="function"]
-	approve_513 -> parameters_514 [label="parameters"]
-	approve_513 -> returns_515 [label="returns"]
-	approve_513 -> expr_516 [label="body"]
-	expr_516 -> call_internal_function_517 [label="expr"]
-	call_internal_function_517 -> internal_function_518 [label="function"]
-	call_internal_function_517 -> cast_519 [label="arg #0"]
-	cast_519 -> call_internal_function_520 [label="expr"]
-	call_internal_function_520 -> internal_function_521 [label="function"]
-	call_internal_function_517 -> variable_522 [label="arg #1"]
-	call_internal_function_517 -> variable_523 [label="arg #2"]
-	expr_516 -> return_524 [label="next"]
-	return_524 -> bool_literal_525 [label="expr"]
-	contract_311 -> transferFrom_526 [label="function"]
-	transferFrom_526 -> parameters_527 [label="parameters"]
-	transferFrom_526 -> returns_528 [label="returns"]
-	transferFrom_526 -> expr_529 [label="body"]
-	expr_529 -> assign_530 [label="expr"]
-	assign_530 -> storage_var_531 [label="left"]
-	assign_530 -> number_literal_532 [label="right"]
-	expr_529 -> if_533 [label="next"]
-	if_533 -> logical_or_534 [label="cond"]
-	logical_or_534 -> storage_load_535 [label="left"]
-	storage_load_535 -> subscript_536 [label="expr"]
-	subscript_536 -> storage_var_537 [label="array"]
-	subscript_536 -> cast_538 [label="index"]
-	cast_538 -> call_internal_function_539 [label="expr"]
-	call_internal_function_539 -> internal_function_540 [label="function"]
-	logical_or_534 -> storage_load_541 [label="right"]
-	storage_load_541 -> subscript_542 [label="expr"]
-	subscript_542 -> storage_var_543 [label="array"]
-	subscript_542 -> variable_544 [label="index"]
-	if_533 -> expr_545 [label="then"]
-	expr_545 -> call_internal_function_546 [label="expr"]
-	call_internal_function_546 -> internal_function_547 [label="function"]
-	call_internal_function_546 -> variable_548 [label="arg #0"]
-	call_internal_function_546 -> variable_549 [label="arg #1"]
-	call_internal_function_546 -> variable_550 [label="arg #2"]
-	expr_545 -> return_551 [label="next"]
-	return_551 -> bool_literal_552 [label="expr"]
-	if_533 -> var_decl_553 [label="next"]
-	var_decl_553 -> call_internal_function_554 [label="init"]
-	call_internal_function_554 -> internal_function_555 [label="function"]
-	call_internal_function_554 -> call_internal_function_556 [label="arg #0"]
-	call_internal_function_556 -> internal_function_557 [label="function"]
-	call_internal_function_556 -> variable_558 [label="arg #0"]
-	call_internal_function_556 -> storage_load_559 [label="arg #1"]
-	storage_load_559 -> storage_var_560 [label="expr"]
-	call_internal_function_554 -> number_literal_561 [label="arg #1"]
-	var_decl_553 -> var_decl_562 [label="next"]
-	var_decl_562 -> call_internal_function_563 [label="init"]
-	call_internal_function_563 -> internal_function_564 [label="function"]
-	call_internal_function_563 -> call_internal_function_565 [label="arg #0"]
-	call_internal_function_565 -> internal_function_566 [label="function"]
-	call_internal_function_565 -> variable_567 [label="arg #0"]
-	call_internal_function_565 -> storage_load_568 [label="arg #1"]
-	storage_load_568 -> storage_var_569 [label="expr"]
-	call_internal_function_563 -> number_literal_570 [label="arg #1"]
-	var_decl_562 -> expr_571 [label="next"]
-	expr_571 -> call_internal_function_572 [label="expr"]
-	call_internal_function_572 -> internal_function_573 [label="function"]
-	call_internal_function_572 -> variable_574 [label="arg #0"]
-	call_internal_function_572 -> storage_load_575 [label="arg #1"]
-	storage_load_575 -> storage_var_576 [label="expr"]
-	call_internal_function_572 -> variable_577 [label="arg #2"]
-	expr_571 -> expr_578 [label="next"]
-	expr_578 -> call_internal_function_579 [label="expr"]
-	call_internal_function_579 -> internal_function_580 [label="function"]
-	call_internal_function_579 -> variable_581 [label="arg #0"]
-	call_internal_function_579 -> storage_load_582 [label="arg #1"]
-	storage_load_582 -> storage_var_583 [label="expr"]
-	call_internal_function_579 -> variable_584 [label="arg #2"]
-	expr_578 -> expr_585 [label="next"]
-	expr_585 -> call_internal_function_586 [label="expr"]
-	call_internal_function_586 -> internal_function_587 [label="function"]
-	call_internal_function_586 -> variable_588 [label="arg #0"]
-	call_internal_function_586 -> variable_589 [label="arg #1"]
-	call_internal_function_586 -> call_internal_function_590 [label="arg #2"]
-	call_internal_function_590 -> internal_function_591 [label="function"]
-	call_internal_function_590 -> call_internal_function_592 [label="arg #0"]
-	call_internal_function_592 -> internal_function_593 [label="function"]
-	call_internal_function_592 -> variable_594 [label="arg #0"]
-	call_internal_function_592 -> variable_595 [label="arg #1"]
-	call_internal_function_590 -> variable_596 [label="arg #1"]
-	expr_585 -> expr_597 [label="next"]
-	expr_597 -> call_internal_function_598 [label="expr"]
-	call_internal_function_598 -> internal_function_599 [label="function"]
-	call_internal_function_598 -> variable_600 [label="arg #0"]
-	call_internal_function_598 -> cast_601 [label="arg #1"]
-	cast_601 -> call_internal_function_602 [label="expr"]
-	call_internal_function_602 -> internal_function_603 [label="function"]
-	call_internal_function_598 -> call_internal_function_604 [label="arg #2"]
-	call_internal_function_604 -> internal_function_605 [label="function"]
-	call_internal_function_604 -> storage_load_606 [label="arg #0"]
-	storage_load_606 -> subscript_607 [label="expr"]
-	subscript_607 -> subscript_608 [label="array"]
-	subscript_608 -> storage_var_609 [label="array"]
-	subscript_608 -> variable_610 [label="index"]
-	subscript_607 -> cast_611 [label="index"]
-	cast_611 -> call_internal_function_612 [label="expr"]
-	call_internal_function_612 -> internal_function_613 [label="function"]
-	call_internal_function_604 -> variable_614 [label="arg #1"]
-	call_internal_function_604 -> alloc_array_615 [label="arg #2"]
-	alloc_array_615 -> number_literal_616 [label="length"]
-	expr_597 -> return_617 [label="next"]
-	return_617 -> bool_literal_618 [label="expr"]
-	contract_311 -> approve_619 [label="function"]
-	approve_619 -> parameters_620 [label="parameters"]
-	approve_619 -> expr_621 [label="body"]
-	expr_621 -> builtins_622 [label="expr"]
-	builtins_622 -> equal_623 [label="arg #0"]
-	equal_623 -> variable_624 [label="left"]
-	equal_623 -> number_literal_625 [label="right"]
-	builtins_622 -> alloc_array_626 [label="arg #1"]
-	alloc_array_626 -> number_literal_627 [label="length"]
-	expr_621 -> expr_628 [label="next"]
-	expr_628 -> assign_629 [label="expr"]
-	assign_629 -> subscript_630 [label="left"]
-	subscript_630 -> storage_var_631 [label="array"]
-	subscript_630 -> variable_632 [label="index"]
-	assign_629 -> call_internal_function_633 [label="right"]
-	call_internal_function_633 -> internal_function_634 [label="function"]
-	call_internal_function_633 -> storage_load_635 [label="arg #0"]
-	storage_load_635 -> subscript_636 [label="expr"]
-	subscript_636 -> storage_var_637 [label="array"]
-	subscript_636 -> variable_638 [label="index"]
-	call_internal_function_633 -> variable_639 [label="arg #1"]
-	contract_311 -> _approve [label="function"]
-	_approve -> parameters_641 [label="parameters"]
-	_approve -> delete [label="body"]
-	delete -> subscript_643 [label="expr"]
-	subscript_643 -> storage_var_644 [label="array"]
-	subscript_643 -> variable_645 [label="index"]
-	contract_311 -> approve_646 [label="function"]
-	approve_646 -> parameters_647 [label="parameters"]
-	approve_646 -> expr_648 [label="body"]
-	expr_648 -> assign_649 [label="expr"]
-	assign_649 -> subscript_650 [label="left"]
-	subscript_650 -> storage_var_651 [label="array"]
-	subscript_650 -> variable_652 [label="index"]
-	assign_649 -> bool_literal_653 [label="right"]
-	contract_311 -> _transfer [label="function"]
-	_transfer -> parameters_655 [label="parameters"]
-	_transfer -> expr_656 [label="body"]
-	expr_656 -> builtins_657 [label="expr"]
-	builtins_657 -> not_658 [label="arg #0"]
-	not_658 -> equal_659 [label="expr"]
-	equal_659 -> variable_660 [label="left"]
-	equal_659 -> number_literal_661 [label="right"]
-	builtins_657 -> alloc_array_662 [label="arg #1"]
-	alloc_array_662 -> number_literal_663 [label="length"]
-	expr_656 -> expr_664 [label="next"]
-	expr_664 -> builtins_665 [label="expr"]
-	builtins_665 -> not_666 [label="arg #0"]
-	not_666 -> equal_667 [label="expr"]
-	equal_667 -> variable_668 [label="left"]
-	equal_667 -> number_literal_669 [label="right"]
-	builtins_665 -> alloc_array_670 [label="arg #1"]
-	alloc_array_670 -> number_literal_671 [label="length"]
-	expr_664 -> expr_672 [label="next"]
-	expr_672 -> builtins_673 [label="expr"]
-	builtins_673 -> more_674 [label="arg #0"]
-	more_674 -> variable_675 [label="left"]
-	more_674 -> number_literal_676 [label="right"]
-	builtins_673 -> alloc_array_677 [label="arg #1"]
-	alloc_array_677 -> number_literal_678 [label="length"]
-	expr_672 -> if_679 [label="next"]
-	if_679 -> storage_load_680 [label="cond"]
-	storage_load_680 -> storage_var_681 [label="expr"]
-	if_679 -> expr_682 [label="then"]
-	expr_682 -> builtins_683 [label="expr"]
-	builtins_683 -> equal_684 [label="arg #0"]
-	equal_684 -> storage_load_685 [label="left"]
-	storage_load_685 -> subscript_686 [label="expr"]
-	subscript_686 -> storage_var_687 [label="array"]
-	subscript_686 -> variable_688 [label="index"]
-	equal_684 -> bool_literal_689 [label="right"]
-	builtins_683 -> alloc_array_690 [label="arg #1"]
-	alloc_array_690 -> number_literal_691 [label="length"]
-	if_679 -> expr_692 [label="next"]
-	expr_692 -> call_internal_function_693 [label="expr"]
-	call_internal_function_693 -> internal_function_694 [label="function"]
-	call_internal_function_693 -> variable_695 [label="arg #0"]
-	call_internal_function_693 -> variable_696 [label="arg #1"]
-	call_internal_function_693 -> variable_697 [label="arg #2"]
-	contract_311 -> _transfers [label="function"]
-	_transfers -> parameters_699 [label="parameters"]
-	_transfers -> expr_700 [label="body"]
-	expr_700 -> builtins_701 [label="expr"]
-	builtins_701 -> not_702 [label="arg #0"]
-	not_702 -> equal_703 [label="expr"]
-	equal_703 -> variable_704 [label="left"]
-	equal_703 -> number_literal_705 [label="right"]
-	builtins_701 -> alloc_array_706 [label="arg #1"]
-	alloc_array_706 -> number_literal_707 [label="length"]
-	expr_700 -> expr_708 [label="next"]
-	expr_708 -> builtins_709 [label="expr"]
-	builtins_709 -> not_710 [label="arg #0"]
-	not_710 -> equal_711 [label="expr"]
-	equal_711 -> variable_712 [label="left"]
-	equal_711 -> number_literal_713 [label="right"]
-	builtins_709 -> alloc_array_714 [label="arg #1"]
-	alloc_array_714 -> number_literal_715 [label="length"]
-	expr_708 -> expr_716 [label="next"]
-	expr_716 -> assign_717 [label="expr"]
-	assign_717 -> subscript_718 [label="left"]
-	subscript_718 -> storage_var_719 [label="array"]
-	subscript_718 -> variable_720 [label="index"]
-	assign_717 -> call_internal_function_721 [label="right"]
-	call_internal_function_721 -> internal_function_722 [label="function"]
-	call_internal_function_721 -> storage_load_723 [label="arg #0"]
-	storage_load_723 -> subscript_724 [label="expr"]
-	subscript_724 -> storage_var_725 [label="array"]
-	subscript_724 -> variable_726 [label="index"]
-	call_internal_function_721 -> variable_727 [label="arg #1"]
-	expr_716 -> expr_728 [label="next"]
-	expr_728 -> assign_729 [label="expr"]
-	assign_729 -> subscript_730 [label="left"]
-	subscript_730 -> storage_var_731 [label="array"]
-	subscript_730 -> variable_732 [label="index"]
-	assign_729 -> call_internal_function_733 [label="right"]
-	call_internal_function_733 -> internal_function_734 [label="function"]
-	call_internal_function_733 -> storage_load_735 [label="arg #0"]
-	storage_load_735 -> subscript_736 [label="expr"]
-	subscript_736 -> storage_var_737 [label="array"]
-	subscript_736 -> variable_738 [label="index"]
-	call_internal_function_733 -> variable_739 [label="arg #1"]
-	expr_728 -> emit_740 [label="next"]
-	emit_740 -> variable_741 [label="arg #0"]
-	emit_740 -> variable_742 [label="arg #1"]
-	emit_740 -> variable_743 [label="arg #2"]
-	contract_311 -> _approve_744 [label="function"]
-	_approve_744 -> parameters_745 [label="parameters"]
-	_approve_744 -> expr_746 [label="body"]
-	expr_746 -> builtins_747 [label="expr"]
-	builtins_747 -> not_748 [label="arg #0"]
-	not_748 -> equal_749 [label="expr"]
-	equal_749 -> variable_750 [label="left"]
-	equal_749 -> number_literal_751 [label="right"]
-	builtins_747 -> alloc_array_752 [label="arg #1"]
-	alloc_array_752 -> number_literal_753 [label="length"]
-	expr_746 -> expr_754 [label="next"]
-	expr_754 -> builtins_755 [label="expr"]
-	builtins_755 -> not_756 [label="arg #0"]
-	not_756 -> equal_757 [label="expr"]
-	equal_757 -> variable_758 [label="left"]
-	equal_757 -> number_literal_759 [label="right"]
-	builtins_755 -> alloc_array_760 [label="arg #1"]
-	alloc_array_760 -> number_literal_761 [label="length"]
-	expr_754 -> expr_762 [label="next"]
-	expr_762 -> assign_763 [label="expr"]
-	assign_763 -> subscript_764 [label="left"]
-	subscript_764 -> subscript_765 [label="array"]
-	subscript_765 -> storage_var_766 [label="array"]
-	subscript_765 -> variable_767 [label="index"]
-	subscript_764 -> variable_768 [label="index"]
-	assign_763 -> variable_769 [label="right"]
-	expr_762 -> emit_770 [label="next"]
-	emit_770 -> variable_771 [label="arg #0"]
-	emit_770 -> variable_772 [label="arg #1"]
-	emit_770 -> variable_773 [label="arg #2"]
-	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_776 [label="Debug"]
-	diagnostics -> diagnostic_777 [label="Debug"]
-	diagnostics -> diagnostic_778 [label="Debug"]
-	diagnostics -> diagnostic_779 [label="Debug"]
-	diagnostics -> diagnostic_780 [label="Error"]
-	diagnostics -> diagnostic_781 [label="Warning"]
-	diagnostics -> diagnostic_782 [label="Warning"]
-	diagnostics -> diagnostic_783 [label="Error"]
-	diagnostics -> diagnostic_784 [label="Error"]
-	diagnostics -> diagnostic_785 [label="Debug"]
-	diagnostics -> diagnostic_786 [label="Warning"]
-	diagnostics -> diagnostic_787 [label="Debug"]
-	diagnostics -> diagnostic_788 [label="Warning"]
-}

+ 0 - 10
tests/contract_testcases/ewasm/public_internal_function.dot

@@ -1,10 +0,0 @@
-strict digraph "tests/contract_testcases/ewasm/public_internal_function.sol" {
-	A [label="name:A\ncontract: foo\ntests/contract_testcases/ewasm/public_internal_function.sol:2:12-13\nfield name:a ty:function() internal"]
-	contract [label="contract foo\ntests/contract_testcases/ewasm/public_internal_function.sol:1:1-7:2"]
-	diagnostic [label="found contract 'foo'\nlevel Debug\ntests/contract_testcases/ewasm/public_internal_function.sol:1:1-7:2"]
-	diagnostic_6 [label="variable of type internal function cannot be 'public'\nlevel Error\ntests/contract_testcases/ewasm/public_internal_function.sol:6:5-8"]
-	structs -> A
-	contracts -> contract
-	diagnostics -> diagnostic [label="Debug"]
-	diagnostics -> diagnostic_6 [label="Error"]
-}

+ 168 - 0
tests/evm.rs

@@ -0,0 +1,168 @@
+// SPDX-License-Identifier: Apache-2.0
+
+use solang::{file_resolver::FileResolver, parse_and_resolve, sema::ast, Target};
+use std::ffi::OsStr;
+
+fn test_solidity(src: &str) -> ast::Namespace {
+    let mut cache = FileResolver::new();
+
+    cache.set_file_contents("test.sol", src.to_string());
+
+    let ns = parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::EVM);
+
+    ns.print_diagnostics_in_plain(&cache, false);
+
+    ns
+}
+
+#[test]
+fn address() {
+    let ns = test_solidity(
+        "
+        contract address_tester {
+            function encode_const() public returns (address) {
+                return 0x52908400098527886E0F7030069857D2E4169EE7;
+            }
+
+            function test_arg(address foo) public {
+                assert(foo == 0x27b1fdb04752bbc536007a920d24acb045561c26);
+
+                // this literal is a number
+                int x = 0x27b1fdb047_52bbc536007a920d24acb045561C26;
+                assert(int(foo) == x);
+            }
+
+            function allones() public returns (address) {
+                return address(1);
+            }
+        }",
+    );
+
+    assert!(!ns.diagnostics.any_errors());
+}
+
+#[test]
+fn try_catch() {
+    let ns = test_solidity(
+        r##"
+        contract b {
+            int32 x;
+
+            constructor(int32 a) public {
+                x = a;
+            }
+
+            function get_x(int32 t) public returns (int32) {
+                if (t == 0) {
+                    revert("cannot be zero");
+                }
+                return x * t;
+            }
+        }
+
+        contract c {
+            b x;
+
+            constructor() public {
+                x = new b(102);
+            }
+
+            function test() public returns (int32) {
+                int32 state = 0;
+                try x.get_x(0) returns (int32 l) {
+                    state = 1;
+                } catch Error(string err) {
+                    if (err == "cannot be zero") {
+                        state = 2;
+                    } else {
+                        state = 3;
+                    }
+                } catch (bytes ) {
+                    state = 4;
+                }
+
+                return state;
+            }
+        }"##,
+    );
+
+    assert!(!ns.diagnostics.any_errors());
+}
+
+#[test]
+fn selfdestruct() {
+    let ns = test_solidity(
+        r##"
+        contract other {
+            function goaway(address payable recipient) public returns (bool) {
+                selfdestruct(recipient);
+            }
+        }
+
+        contract c {
+            other o;
+            function step1() public {
+                o = new other{value: 511}();
+            }
+
+            function step2() public {
+                bool foo = o.goaway(payable(address(this)));
+            }
+        }"##,
+    );
+
+    assert!(!ns.diagnostics.any_errors());
+}
+
+#[test]
+fn eth_builtins() {
+    let ns = test_solidity(
+        r#"
+contract testing  {
+    function test_address() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := a
+        }
+    }
+
+    function test_balance() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := balance(a)
+        }
+    }
+
+    function test_selfbalance() public view returns (uint256 ret) {
+        assembly {
+            let a := selfbalance()
+            ret := a
+        }
+    }
+
+    function test_caller() public view returns (uint256 ret) {
+        assembly {
+            let a := caller()
+            ret := a
+        }
+    }
+
+    function test_callvalue() public view returns (uint256 ret) {
+        assembly {
+            let a := callvalue()
+            ret := a
+        }
+    }
+
+    function test_extcodesize() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := extcodesize(a)
+        }
+    }
+}
+"#,
+    );
+
+    assert!(!ns.diagnostics.any_errors());
+}

+ 0 - 2414
tests/ewasm.rs

@@ -1,2414 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use ethabi::{decode, ethereum_types, RawLog, Token};
-use num_derive::FromPrimitive;
-use num_traits::FromPrimitive;
-use rand::Rng;
-use ripemd::Ripemd160;
-use sha2::{Digest, Sha256};
-use std::collections::HashMap;
-use std::ffi::OsStr;
-use std::fmt;
-use tiny_keccak::{Hasher, Keccak};
-use wasmi::memory_units::Pages;
-use wasmi::*;
-
-use solang::{compile, file_resolver::FileResolver, Target};
-
-mod ewasm_tests;
-
-type Address = [u8; 20];
-
-pub fn address_new() -> Address {
-    let mut rng = rand::thread_rng();
-
-    let mut a = [0u8; 20];
-
-    rng.fill(&mut a[..]);
-
-    a
-}
-
-struct VirtualMachine {
-    memory: MemoryRef,
-    cur: Address,
-    code: Vec<u8>,
-    input: Vec<u8>,
-    output: Vec<u8>,
-    returndata: Vec<u8>,
-}
-
-impl VirtualMachine {
-    fn new(code: Vec<u8>, address: Address) -> Self {
-        VirtualMachine {
-            memory: MemoryInstance::alloc(Pages(2), Some(Pages(2))).unwrap(),
-            input: Vec::new(),
-            output: Vec::new(),
-            returndata: Vec::new(),
-            code,
-            cur: address,
-        }
-    }
-}
-
-struct TestRuntime {
-    abi: ethabi::Contract,
-    contracts: Vec<Vec<u8>>,
-    value: u128,
-    caller: Address,
-    accounts: HashMap<Address, (Vec<u8>, u128)>,
-    store: HashMap<(Address, [u8; 32]), [u8; 32]>,
-    vm: VirtualMachine,
-    events: Vec<Event>,
-}
-
-struct Event {
-    topics: Vec<[u8; 32]>,
-    data: Vec<u8>,
-}
-
-#[derive(FromPrimitive)]
-#[allow(non_camel_case_types)]
-pub enum Extern {
-    getCallDataSize = 1,
-    callDataCopy,
-    storageLoad,
-    storageStore,
-    finish,
-    revert,
-    printMem,
-    getCodeSize,
-    getExternalCodeSize,
-    codeCopy,
-    create,
-    call,
-    returnDataCopy,
-    getReturnDataSize,
-    getCallValue,
-    getCaller,
-    getAddress,
-    getExternalBalance,
-    selfDestruct,
-    log,
-}
-
-#[derive(Debug, Clone, PartialEq, Eq)]
-struct HostCodeFinish {}
-
-impl HostError for HostCodeFinish {}
-
-impl fmt::Display for HostCodeFinish {
-    fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
-        write!(f, "finish")
-    }
-}
-
-#[derive(Debug, Clone, PartialEq, Eq)]
-struct HostCodeRevert {}
-
-impl fmt::Display for HostCodeRevert {
-    fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
-        write!(f, "revert")
-    }
-}
-
-impl HostError for HostCodeRevert {}
-
-impl Externals for TestRuntime {
-    fn invoke_index(
-        &mut self,
-        index: usize,
-        args: RuntimeArgs,
-    ) -> Result<Option<RuntimeValue>, Trap> {
-        match FromPrimitive::from_usize(index) {
-            Some(Extern::getCallDataSize) => {
-                Ok(Some(RuntimeValue::I32(self.vm.input.len() as i32)))
-            }
-            Some(Extern::getCodeSize) => Ok(Some(RuntimeValue::I32(self.vm.code.len() as i32))),
-            Some(Extern::getReturnDataSize) => {
-                Ok(Some(RuntimeValue::I32(self.vm.returndata.len() as i32)))
-            }
-            Some(Extern::callDataCopy) => {
-                let dest = args.nth_checked::<u32>(0)?;
-                let input_offset = args.nth_checked::<u32>(1)? as usize;
-                let input_len = args.nth_checked::<u32>(2)? as usize;
-
-                self.vm
-                    .memory
-                    .set(
-                        dest,
-                        &self.vm.input[input_offset as usize..input_offset + input_len],
-                    )
-                    .expect("calldatacopy should work");
-
-                Ok(None)
-            }
-            Some(Extern::codeCopy) => {
-                let dest = args.nth_checked::<u32>(0)?;
-                let code_offset = args.nth_checked::<u32>(1)? as usize;
-                let code_len = args.nth_checked::<u32>(2)? as usize;
-
-                let data = &self.vm.code[code_offset as usize..code_offset + code_len];
-
-                println!("codeCopy {} {}", code_len, hex::encode(data));
-
-                self.vm
-                    .memory
-                    .set(dest, data)
-                    .expect("codeCopy should work");
-
-                Ok(None)
-            }
-            Some(Extern::returnDataCopy) => {
-                let dest = args.nth_checked::<u32>(0)?;
-                let data_offset = args.nth_checked::<u32>(1)? as usize;
-                let data_len = args.nth_checked::<u32>(2)? as usize;
-
-                let data = &self.vm.returndata[data_offset as usize..data_offset + data_len];
-
-                println!("returnDataCopy {} {}", data_len, hex::encode(data));
-
-                self.vm
-                    .memory
-                    .set(dest, data)
-                    .expect("returnDataCopy should work");
-
-                Ok(None)
-            }
-            Some(Extern::finish) => {
-                let src: u32 = args.nth_checked(0)?;
-                let len: u32 = args.nth_checked(1)?;
-
-                let mut output = Vec::new();
-                output.resize(len as usize, 0);
-
-                self.vm.memory.get_into(src, &mut output).unwrap();
-
-                println!("finish: {} {}", len, hex::encode(&output));
-
-                self.vm.output = output;
-
-                Err(Trap::new(TrapKind::Host(Box::new(HostCodeFinish {}))))
-            }
-            Some(Extern::revert) => {
-                let src: u32 = args.nth_checked(0)?;
-                let len: u32 = args.nth_checked(1)?;
-
-                let mut output = Vec::new();
-                output.resize(len as usize, 0);
-
-                self.vm.memory.get_into(src, &mut output).unwrap();
-                self.vm.output = output;
-
-                println!(
-                    "revert {} {}",
-                    self.vm.output.len(),
-                    hex::encode(&self.vm.output)
-                );
-
-                Err(Trap::new(TrapKind::Host(Box::new(HostCodeRevert {}))))
-            }
-            Some(Extern::storageLoad) => {
-                let key_ptr: u32 = args.nth_checked(0)?;
-                let data_ptr: u32 = args.nth_checked(1)?;
-
-                let mut key = [0u8; 32];
-
-                self.vm
-                    .memory
-                    .get_into(key_ptr, &mut key)
-                    .expect("copy key from wasm memory");
-
-                let res = if let Some(v) = self.store.get(&(self.vm.cur, key)) {
-                    v
-                } else {
-                    &[0u8; 32]
-                };
-
-                println!("storageLoad {} -> {}", hex::encode(&key), hex::encode(&res));
-
-                self.vm
-                    .memory
-                    .set(data_ptr, res)
-                    .expect("copy key from wasm memory");
-
-                Ok(None)
-            }
-            Some(Extern::storageStore) => {
-                let key_ptr: u32 = args.nth_checked(0)?;
-                let data_ptr: u32 = args.nth_checked(1)?;
-
-                let mut key = [0u8; 32];
-                let mut data = [0u8; 32];
-
-                self.vm
-                    .memory
-                    .get_into(key_ptr, &mut key)
-                    .expect("copy key from wasm memory");
-
-                self.vm
-                    .memory
-                    .get_into(data_ptr, &mut data)
-                    .expect("copy key from wasm memory");
-
-                println!(
-                    "storageStore {} <- {}",
-                    hex::encode(&key),
-                    hex::encode(&data)
-                );
-
-                if data.iter().any(|n| *n != 0) {
-                    self.store.insert((self.vm.cur, key), data);
-                } else {
-                    self.store.remove(&(self.vm.cur, key));
-                }
-                Ok(None)
-            }
-            Some(Extern::printMem) => {
-                let data_ptr: u32 = args.nth_checked(0)?;
-                let len: u32 = args.nth_checked(1)?;
-
-                let mut buf = Vec::new();
-                buf.resize(len as usize, 0u8);
-
-                if let Err(e) = self.vm.memory.get_into(data_ptr, &mut buf) {
-                    panic!("printMem: {}", e);
-                }
-
-                println!("{}", String::from_utf8_lossy(&buf));
-
-                Ok(None)
-            }
-            Some(Extern::create) => {
-                //let balance_ptr: u32 = args.nth_checked(0)?;
-                let input_ptr: u32 = args.nth_checked(1)?;
-                let input_len: u32 = args.nth_checked(2)?;
-                let address_ptr: u32 = args.nth_checked(3)?;
-
-                let mut buf = Vec::new();
-                buf.resize(input_len as usize, 0u8);
-
-                if let Err(e) = self.vm.memory.get_into(input_ptr, &mut buf) {
-                    panic!("create: {}", e);
-                }
-
-                println!("create code: {}", hex::encode(&buf));
-
-                let addr = address_new();
-                println!("create address: {}", hex::encode(&addr));
-
-                // when ewasm creates a contract, the abi encoded args are concatenated to the
-                // code. So, find which code is was and use that instead. Otherwise, the
-                // wasm validator will trip
-                let code = self
-                    .contracts
-                    .iter()
-                    .find(|c| buf.starts_with(c))
-                    .unwrap()
-                    .clone();
-
-                let mut vm = VirtualMachine::new(buf, addr);
-
-                std::mem::swap(&mut self.vm, &mut vm);
-
-                let module = self.create_module(&code);
-
-                if let Some(ExternVal::Memory(memory_ref)) = module.export_by_name("memory") {
-                    self.vm.memory = memory_ref;
-                }
-
-                match module.invoke_export("main", &[], self) {
-                    Err(wasmi::Error::Trap(trap)) => match trap.kind() {
-                        TrapKind::Host(host_error) => {
-                            assert!(
-                                host_error.downcast_ref::<HostCodeRevert>().is_none(),
-                                "revert executed"
-                            );
-                        }
-                        _ => panic!("fail to invoke main via create: {}", trap),
-                    },
-                    Ok(_) => {}
-                    Err(e) => panic!("fail to invoke main via create: {}", e),
-                }
-
-                let res = self.vm.output.clone();
-
-                println!("create returns: {}", hex::encode(&res));
-
-                std::mem::swap(&mut self.vm, &mut vm);
-
-                self.accounts.insert(addr, (res, 0));
-
-                self.vm
-                    .memory
-                    .set(address_ptr, &addr[..])
-                    .expect("copy key from wasm memory");
-
-                Ok(Some(RuntimeValue::I32(0)))
-            }
-            Some(Extern::call) => {
-                //let gas: u64 = args.nth_checked(0)?;
-                let address_ptr: u32 = args.nth_checked(1)?;
-                //let value_ptr: u32 = args.nth_checked(2)?;
-                let input_ptr: u32 = args.nth_checked(3)?;
-                let input_len: u32 = args.nth_checked(4)?;
-
-                let mut buf = Vec::new();
-                buf.resize(input_len as usize, 0u8);
-
-                if let Err(e) = self.vm.memory.get_into(input_ptr, &mut buf) {
-                    panic!("call: {}", e);
-                }
-
-                let mut addr = [0u8; 20];
-
-                if let Err(e) = self.vm.memory.get_into(address_ptr, &mut addr) {
-                    panic!("address: {}", e);
-                }
-
-                println!(
-                    "extern call address: {} data: {}",
-                    hex::encode(&addr),
-                    hex::encode(&buf)
-                );
-
-                // if the first 19 bytes are 0, it's a precompile
-                if addr[0..19].iter().all(|v| *v == 0) {
-                    match addr[19] {
-                        20 => {
-                            let mut hasher = Keccak::v256();
-                            let mut hash = [0u8; 32];
-                            hasher.update(&buf);
-                            hasher.finalize(&mut hash);
-                            self.vm.returndata = hash.to_vec();
-                            return Ok(Some(RuntimeValue::I32(0)));
-                        }
-                        2 => {
-                            let mut hasher = Sha256::new();
-                            hasher.update(&buf);
-                            self.vm.returndata = hasher.finalize().to_vec();
-                            return Ok(Some(RuntimeValue::I32(0)));
-                        }
-                        3 => {
-                            let mut hasher = Ripemd160::new();
-                            hasher.update(&buf);
-                            self.vm.returndata = hasher.finalize().to_vec();
-                            return Ok(Some(RuntimeValue::I32(0)));
-                        }
-                        n => {
-                            panic!("unknown precompile {}", n);
-                        }
-                    }
-                }
-
-                // when ewasm creates a contract, the abi encoded args are concatenated to the
-                // code. So, find which code is was and use that instead. Otherwise, the
-                // wasm validator will trip
-                let (code, _) = self.accounts.get(&addr).unwrap().clone();
-
-                let mut vm = VirtualMachine::new(code.to_vec(), addr);
-
-                std::mem::swap(&mut self.vm, &mut vm);
-
-                self.vm.input = buf;
-
-                let module = self.create_module(&code);
-
-                if let Some(ExternVal::Memory(memory_ref)) = module.export_by_name("memory") {
-                    self.vm.memory = memory_ref;
-                }
-
-                let ret = match module.invoke_export("main", &[], self) {
-                    Err(wasmi::Error::Trap(trap)) => match trap.kind() {
-                        TrapKind::Host(kind) => {
-                            if format!("{}", kind) == "revert" {
-                                1
-                            } else {
-                                0
-                            }
-                        }
-                        _ => panic!("fail to invoke main via create: {}", trap),
-                    },
-                    Ok(_) => 0,
-                    Err(e) => panic!("fail to invoke main via create: {}", e),
-                };
-
-                let res = self.vm.output.clone();
-
-                std::mem::swap(&mut self.vm, &mut vm);
-
-                self.vm.returndata = res;
-
-                self.vm
-                    .memory
-                    .set(address_ptr, &addr[..])
-                    .expect("copy key from wasm memory");
-
-                Ok(Some(RuntimeValue::I32(ret)))
-            }
-            Some(Extern::getCallValue) => {
-                let value_ptr: u32 = args.nth_checked(0)?;
-
-                let value = self.value.to_le_bytes();
-
-                println!("getCallValue: {}", hex::encode(&value));
-
-                self.vm.memory.set(value_ptr, &value).expect("set value");
-
-                Ok(None)
-            }
-            Some(Extern::getAddress) => {
-                let address_ptr: u32 = args.nth_checked(0)?;
-
-                println!("getAddress: {}", hex::encode(&self.vm.cur));
-
-                self.vm
-                    .memory
-                    .set(address_ptr, &self.vm.cur[..])
-                    .expect("set address");
-
-                Ok(None)
-            }
-            Some(Extern::getCaller) => {
-                let address_ptr: u32 = args.nth_checked(0)?;
-
-                println!("getCaller: {}", hex::encode(&self.caller));
-
-                self.vm
-                    .memory
-                    .set(address_ptr, &self.caller[..])
-                    .expect("set address");
-
-                Ok(None)
-            }
-            Some(Extern::getExternalBalance) => {
-                let address_ptr: u32 = args.nth_checked(0)?;
-                let balance_ptr: u32 = args.nth_checked(1)?;
-
-                let mut addr = [0u8; 20];
-
-                if let Err(e) = self.vm.memory.get_into(address_ptr, &mut addr) {
-                    panic!("call: {}", e);
-                }
-
-                let value = self.accounts.get(&addr).map(|a| a.1).unwrap_or(0);
-
-                println!("getExternalBalance: {} {}", hex::encode(&addr), value);
-
-                self.vm
-                    .memory
-                    .set(balance_ptr, &value.to_le_bytes()[..])
-                    .expect("set balance");
-
-                Ok(None)
-            }
-            Some(Extern::selfDestruct) => {
-                let address_ptr: u32 = args.nth_checked(0)?;
-
-                let mut addr = [0u8; 20];
-
-                if let Err(e) = self.vm.memory.get_into(address_ptr, &mut addr) {
-                    panic!("selfDestruct: {}", e);
-                }
-
-                let remaining = self.accounts[&self.vm.cur].1;
-
-                self.accounts.get_mut(&addr).unwrap().1 += remaining;
-
-                println!("selfDestruct: {} {}", hex::encode(&addr), remaining);
-
-                self.accounts.remove(&self.vm.cur);
-
-                Err(Trap::new(TrapKind::Host(Box::new(HostCodeFinish {}))))
-            }
-            Some(Extern::log) => {
-                let data_ptr: u32 = args.nth_checked(0)?;
-                let data_len: u32 = args.nth_checked(1)?;
-
-                let mut data = Vec::new();
-                data.resize(data_len as usize, 0u8);
-
-                if let Err(e) = self.vm.memory.get_into(data_ptr, &mut data) {
-                    panic!("log: {}", e);
-                }
-
-                let topic_count: u32 = args.nth_checked(2)?;
-
-                let mut event = Event {
-                    data,
-                    topics: Vec::new(),
-                };
-
-                assert!(topic_count <= 4, "log: wrong topic count {}", topic_count);
-
-                for topic in 0..topic_count {
-                    let topic_ptr: u32 = args.nth_checked(3 + topic as usize)?;
-                    let mut topic_data = [0u8; 32];
-
-                    if let Err(e) = self.vm.memory.get_into(topic_ptr, &mut topic_data) {
-                        panic!("log: topic {} {}", topic, e);
-                    }
-
-                    event.topics.push(topic_data);
-                }
-
-                println!(
-                    "log: data: {} topics: {}",
-                    hex::encode(&event.data),
-                    event
-                        .topics
-                        .iter()
-                        .map(hex::encode)
-                        .collect::<Vec<String>>()
-                        .join(" ")
-                );
-
-                self.events.push(event);
-
-                Ok(None)
-            }
-            Some(Extern::getExternalCodeSize) => {
-                let address_ptr: u32 = args.nth_checked(0)?;
-
-                let mut addr = [0u8; 20];
-
-                if let Err(e) = self.vm.memory.get_into(address_ptr, &mut addr) {
-                    panic!("getExternalCodeSize: {}", e);
-                }
-
-                let size = self.accounts.get(&addr).map(|a| a.0.len()).unwrap();
-
-                println!("getExternalCodeSize: {} {}", hex::encode(&addr), size);
-
-                Ok(Some(RuntimeValue::I32(size as i32)))
-            }
-            _ => panic!("external {} unknown", index),
-        }
-    }
-}
-
-impl ModuleImportResolver for TestRuntime {
-    fn resolve_func(&self, field_name: &str, signature: &Signature) -> Result<FuncRef, Error> {
-        let index = match field_name {
-            "getCallDataSize" => Extern::getCallDataSize,
-            "callDataCopy" => Extern::callDataCopy,
-            "finish" => Extern::finish,
-            "revert" => Extern::revert,
-            "storageStore" => Extern::storageStore,
-            "storageLoad" => Extern::storageLoad,
-            "printMem" => Extern::printMem,
-            "getCodeSize" => Extern::getCodeSize,
-            "codeCopy" => Extern::codeCopy,
-            "create" => Extern::create,
-            "call" => Extern::call,
-            "returnDataCopy" => Extern::returnDataCopy,
-            "getReturnDataSize" => Extern::getReturnDataSize,
-            "getCallValue" => Extern::getCallValue,
-            "getCaller" => Extern::getCaller,
-            "getAddress" => Extern::getAddress,
-            "getExternalBalance" => Extern::getExternalBalance,
-            "selfDestruct" => Extern::selfDestruct,
-            "getExternalCodeSize" => Extern::getExternalCodeSize,
-            "log" => Extern::log,
-            _ => {
-                panic!("{} not implemented", field_name);
-            }
-        };
-
-        Ok(FuncInstance::alloc_host(signature.clone(), index as usize))
-    }
-
-    fn resolve_memory(
-        &self,
-        _field_name: &str,
-        _memory_type: &MemoryDescriptor,
-    ) -> Result<MemoryRef, Error> {
-        Ok(self.vm.memory.clone())
-    }
-}
-
-impl TestRuntime {
-    fn create_module(&self, code: &[u8]) -> ModuleRef {
-        let module = Module::from_buffer(&code).expect("parse wasm should work");
-
-        ModuleInstance::new(
-            &module,
-            &ImportsBuilder::new().with_resolver("ethereum", self),
-        )
-        .expect("Failed to instantiate module")
-        .run_start(&mut NopExternals)
-        .expect("Failed to run start function in module")
-    }
-
-    fn function(&mut self, name: &str, args: &[Token]) -> Vec<Token> {
-        let calldata = match self.abi.functions[name][0].encode_input(args) {
-            Ok(n) => n,
-            Err(x) => panic!("{}", x),
-        };
-
-        self.raw_function(calldata);
-
-        println!("RETURNDATA: {}", hex::encode(&self.vm.output));
-
-        self.abi.functions[name][0]
-            .decode_output(&self.vm.output)
-            .unwrap()
-    }
-
-    fn raw_function(&mut self, calldata: Vec<u8>) {
-        let module = self.create_module(&self.accounts[&self.vm.cur].0);
-
-        println!("FUNCTION CALLDATA: {}", hex::encode(&calldata));
-
-        self.vm.input = calldata;
-
-        if let Some(ExternVal::Memory(memory_ref)) = module.export_by_name("memory") {
-            self.vm.memory = memory_ref;
-        }
-
-        match module.invoke_export("main", &[], self) {
-            Err(wasmi::Error::Trap(trap)) => match trap.kind() {
-                TrapKind::Host(host_error) => {
-                    assert!(
-                        host_error.downcast_ref::<HostCodeFinish>().is_some(),
-                        "fail to invoke main: {}",
-                        host_error
-                    );
-                }
-                _ => panic!("fail to invoke main: {}", trap),
-            },
-            Ok(Some(RuntimeValue::I32(0))) => {}
-            Ok(Some(RuntimeValue::I32(ret))) => panic!("main returns: {}", ret),
-            Err(e) => panic!("fail to invoke main: {}", e),
-            Ok(None) => panic!("fail to invoke main"),
-            _ => panic!("fail to invoke main, unknown"),
-        }
-    }
-
-    fn function_abi_fail(&mut self, name: &str, args: &[Token], patch: fn(&mut Vec<u8>)) {
-        let mut calldata = match self.abi.functions[name][0].encode_input(args) {
-            Ok(n) => n,
-            Err(x) => panic!("{}", x),
-        };
-
-        patch(&mut calldata);
-
-        let module = self.create_module(&self.accounts[&self.vm.cur].0);
-
-        println!("FUNCTION CALLDATA: {}", hex::encode(&calldata));
-
-        if let Some(ExternVal::Memory(memory_ref)) = module.export_by_name("memory") {
-            self.vm.memory = memory_ref;
-        }
-
-        self.vm.input = calldata;
-
-        match module.invoke_export("main", &[], self) {
-            Err(wasmi::Error::Trap(trap)) => match trap.kind() {
-                TrapKind::Host(host_error) => {
-                    assert!(
-                        host_error.downcast_ref::<HostCodeFinish>().is_some(),
-                        "fail to invoke main: {}",
-                        host_error
-                    );
-                }
-                _ => panic!("fail to invoke main: {}", trap),
-            },
-            Ok(Some(RuntimeValue::I32(3))) => {}
-            Ok(Some(RuntimeValue::I32(ret))) => panic!("main returns: {}", ret),
-            Err(e) => panic!("fail to invoke main: {}", e),
-            Ok(None) => panic!("fail to invoke main"),
-            _ => panic!("fail to invoke main, unknown"),
-        }
-    }
-
-    fn function_revert(&mut self, name: &str, args: &[Token]) -> Option<String> {
-        let calldata = match self.abi.functions[name][0].encode_input(args) {
-            Ok(n) => n,
-            Err(x) => panic!("{}", x),
-        };
-
-        let module = self.create_module(&self.accounts[&self.vm.cur].0);
-
-        println!("FUNCTION CALLDATA: {}", hex::encode(&calldata));
-
-        self.vm.input = calldata;
-
-        if let Some(ExternVal::Memory(memory_ref)) = module.export_by_name("memory") {
-            self.vm.memory = memory_ref;
-        }
-
-        match module.invoke_export("main", &[], self) {
-            Err(wasmi::Error::Trap(trap)) => match trap.kind() {
-                TrapKind::Host(host_error) => {
-                    if host_error.downcast_ref::<HostCodeRevert>().is_none() {
-                        panic!("function was suppose to revert, not finish")
-                    }
-                }
-                _ => panic!("fail to invoke main: {}", trap),
-            },
-            Ok(Some(RuntimeValue::I32(1))) => {}
-            Err(e) => panic!("fail to invoke main: {}", e),
-            _ => panic!("fail to invoke main"),
-        }
-
-        println!("RETURNDATA: {}", hex::encode(&self.vm.output));
-
-        if self.vm.output.is_empty() {
-            return None;
-        }
-
-        assert_eq!(self.vm.output[..4], 0x08c3_79a0u32.to_be_bytes());
-
-        if let Ok(v) = decode(&[ethabi::ParamType::String], &self.vm.output[4..]) {
-            assert_eq!(v.len(), 1);
-
-            if let ethabi::Token::String(r) = &v[0] {
-                return Some(r.to_owned());
-            }
-        }
-
-        panic!("failed to decode");
-    }
-
-    fn constructor_expect_revert(&mut self, args: &[Token]) {
-        assert!(!self.do_constructor(args));
-    }
-
-    fn constructor(&mut self, args: &[Token]) {
-        assert!(self.do_constructor(args));
-    }
-
-    fn do_constructor(&mut self, args: &[Token]) -> bool {
-        let calldata = if let Some(constructor) = &self.abi.constructor {
-            constructor.encode_input(Vec::new(), args).unwrap()
-        } else {
-            Vec::new()
-        };
-
-        let module = self.create_module(self.contracts.last().unwrap());
-
-        println!("CONSTRUCTOR CALLDATA: {}", hex::encode(&calldata));
-
-        if let Some(ExternVal::Memory(memory_ref)) = module.export_by_name("memory") {
-            self.vm.memory = memory_ref;
-        }
-
-        self.vm.code.extend(calldata);
-        self.vm.cur = address_new();
-
-        match module.invoke_export("main", &[], self) {
-            Err(wasmi::Error::Trap(trap)) => match trap.kind() {
-                TrapKind::Host(host_error) => {
-                    if host_error.downcast_ref::<HostCodeRevert>().is_some() {
-                        return false;
-                    }
-                }
-                _ => panic!("fail to invoke main: {}", trap),
-            },
-            Ok(_) => {}
-            Err(e) => panic!("fail to invoke main: {}", e),
-        }
-
-        println!(
-            "DEPLOYER RETURNS: {} {}",
-            self.vm.output.len(),
-            hex::encode(&self.vm.output)
-        );
-
-        self.accounts
-            .insert(self.vm.cur, (self.vm.output.clone(), 0));
-
-        true
-    }
-
-    fn events(&self) -> Vec<RawLog> {
-        self.events
-            .iter()
-            .map(|e| RawLog {
-                data: e.data.clone(),
-                topics: e.topics.iter().map(ethereum_types::H256::from).collect(),
-            })
-            .collect()
-    }
-}
-
-fn build_solidity(src: &str) -> TestRuntime {
-    let mut cache = FileResolver::new();
-
-    cache.set_file_contents("test.sol", src.to_string());
-
-    let (res, ns) = compile(
-        OsStr::new("test.sol"),
-        &mut cache,
-        inkwell::OptimizationLevel::Default,
-        Target::Ewasm,
-        false,
-    );
-
-    ns.print_diagnostics_in_plain(&cache, false);
-
-    for v in &res {
-        println!("contract size:{}", v.0.len());
-    }
-
-    assert!(!res.is_empty());
-
-    // resolve
-    let (bc, abi) = res.last().unwrap().clone();
-
-    TestRuntime {
-        accounts: HashMap::new(),
-        vm: VirtualMachine::new(bc, [0u8; 20]),
-        value: 0,
-        store: HashMap::new(),
-        abi: ethabi::Contract::load(abi.as_bytes()).unwrap(),
-        contracts: res.into_iter().map(|v| v.0).collect(),
-        events: Vec::new(),
-        caller: address_new(),
-    }
-}
-
-#[test]
-fn simple_solidiy_compile_and_run() {
-    // parse
-    let mut runtime = build_solidity(
-        "
-        contract test {
-            function foo() public returns (uint32) {
-                return 2;
-            }
-        }",
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    let returns = runtime.function("foo", &[]);
-
-    assert_eq!(
-        returns,
-        vec![ethabi::Token::Uint(ethereum_types::U256::from(2))]
-    );
-}
-
-#[test]
-fn simple_loops() {
-    let mut runtime = build_solidity(
-        r##"
-contract test3 {
-	function foo(uint32 a) public returns (uint32) {
-		uint32 b = 50 - a;
-		uint32 c;
-		c = 100 * b;
-		c += 5;
-		return a * 1000 + c;
-	}
-
-	function bar(uint32 b, bool x) public returns (uint32) {
-		uint32 i = 1;
-		if (x) {
-			do {
-				i += 10;
-			}
-			while (b-- > 0);
-		} else {
-			uint32 j;
-			for (j=2; j<10; j++) {
-				i *= 3;
-			}
-		}
-		return i;
-	}
-
-	function baz(uint32 x) public returns (uint32) {
-		for (uint32 i = 0; i<100; i++) {
-			x *= 7;
-
-			if (x > 200) {
-				break;
-			}
-
-			x++;
-		}
-
-		return x;
-	}
-}"##,
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    for i in 0..=50 {
-        let res = ((50 - i) * 100 + 5) + i * 1000;
-
-        let returns =
-            runtime.function("foo", &[ethabi::Token::Uint(ethereum_types::U256::from(i))]);
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::Uint(ethereum_types::U256::from(res))]
-        );
-    }
-
-    for i in 0..=50 {
-        let res = (i + 1) * 10 + 1;
-
-        let returns = runtime.function(
-            "bar",
-            &[
-                ethabi::Token::Uint(ethereum_types::U256::from(i)),
-                ethabi::Token::Bool(true),
-            ],
-        );
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::Uint(ethereum_types::U256::from(res))]
-        );
-    }
-
-    for i in 0..=50 {
-        let mut res = 1;
-
-        for _ in 2..10 {
-            res *= 3;
-        }
-
-        let returns = runtime.function(
-            "bar",
-            &[
-                ethabi::Token::Uint(ethereum_types::U256::from(i)),
-                ethabi::Token::Bool(false),
-            ],
-        );
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::Uint(ethereum_types::U256::from(res))]
-        );
-    }
-
-    for i in 1..=50 {
-        let mut res = i;
-
-        for _ in 0..100 {
-            res *= 7;
-            if res > 200 {
-                break;
-            }
-            res += 1;
-        }
-
-        let returns =
-            runtime.function("baz", &[ethabi::Token::Uint(ethereum_types::U256::from(i))]);
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::Uint(ethereum_types::U256::from(res))]
-        );
-    }
-}
-
-#[test]
-fn stack_test() {
-    let mut runtime = build_solidity(
-        r##"
-contract test3 {
-	function foo() public returns (bool) {
-		uint b = 18446744073709551616;
-    uint c = 36893488147419103232;
-
-    return b * 2 == c;
-	}
-}"##,
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    let returns = runtime.function("foo", &[]);
-
-    assert_eq!(returns, vec![ethabi::Token::Bool(true)]);
-}
-
-#[test]
-fn abi_call_return_test() {
-    let mut runtime = build_solidity(
-        r##"
-contract test {
-	function foo() public returns (uint32) {
-    return 102;
-	}
-}"##,
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    let returns = runtime.function("foo", &[]);
-
-    assert_eq!(
-        returns,
-        vec![ethabi::Token::Uint(ethereum_types::U256::from(102))]
-    );
-}
-
-#[test]
-fn abi_call_pass_return_test() {
-    let mut runtime = build_solidity(
-        r##"
-        contract x {
-            function test() public {
-
-            }
-        }
-
-        contract bar {
-            function foo(uint32 a) public returns (uint32) {
-            return a;
-            }
-        }"##,
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    for val in [102i32, 255, 256, 0x7fff_ffff].iter() {
-        let returns = runtime.function(
-            "foo",
-            &[ethabi::Token::Uint(ethereum_types::U256::from(*val))],
-        );
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::Uint(ethereum_types::U256::from(*val))]
-        );
-    }
-}
-
-#[test]
-fn contract_storage_test() {
-    let mut runtime = build_solidity(
-        r##"
-contract test {
-uint32 foo;
-constructor() public {
-    foo = 102;
-}
-	function getFoo() public returns (uint32) {
-    return foo + 256;
-	}
-	function setFoo(uint32 a) public  {
-    foo = a - 256;
-	}
-}"##,
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    for val in [4096u32, 1000u32].iter() {
-        let eval = ethabi::Token::Uint(ethereum_types::U256::from(*val));
-        // create call for foo
-        let returns = runtime.function("setFoo", &[eval]);
-
-        assert_eq!(returns, vec![]);
-
-        // create call for foo
-        let returns = runtime.function("getFoo", &[]);
-
-        let eval = ethabi::Token::Uint(ethereum_types::U256::from(*val));
-        assert_eq!(returns, vec![eval]);
-    }
-}
-
-#[test]
-fn large_ints_encoded() {
-    let mut runtime = build_solidity(
-        r##"
-    contract test {
-        uint foo;
-        constructor() public {
-            foo = 102;
-        }
-        function getFoo() public returns (uint) {
-            return foo + 256;
-        }
-        function setFoo(uint a) public  {
-            foo = a - 256;
-        }
-}"##,
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    for val in [4096u32, 1000u32].iter() {
-        let eval = ethabi::Token::Uint(ethereum_types::U256::from(*val));
-        // create call for foo
-        let returns = runtime.function("setFoo", &[eval]);
-
-        assert_eq!(returns, vec![]);
-
-        // create call for foo
-        let returns = runtime.function("getFoo", &[]);
-
-        let eval = ethabi::Token::Uint(ethereum_types::U256::from(*val));
-        assert_eq!(returns, vec![eval]);
-    }
-}
-
-#[test]
-fn address() {
-    let mut runtime = build_solidity(
-        "
-        contract address_tester {
-            function encode_const() public returns (address) {
-                return 0x52908400098527886E0F7030069857D2E4169EE7;
-            }
-
-            function test_arg(address foo) public {
-                assert(foo == 0x27b1fdb04752bbc536007a920d24acb045561c26);
-
-                // this literal is a number
-                int x = 0x27b1fdb047_52bbc536007a920d24acb045561C26;
-                assert(int(foo) == x);
-            }
-
-            function allones() public returns (address) {
-                return address(1);
-            }
-        }",
-    );
-
-    // call constructor
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("encode_const", &[]);
-
-    assert_eq!(
-        ret,
-        [ethabi::Token::Address(ethereum_types::Address::from_slice(
-            &hex::decode("52908400098527886E0F7030069857D2E4169EE7").unwrap()
-        ))]
-    );
-
-    runtime.function(
-        "test_arg",
-        &[ethabi::Token::Address(ethereum_types::Address::from_slice(
-            &hex::decode("27b1fdb04752bbc536007a920d24acb045561c26").unwrap(),
-        ))],
-    );
-
-    let ret = runtime.function("allones", &[]);
-
-    assert_eq!(
-        ret,
-        [ethabi::Token::Address(ethereum_types::Address::from_slice(
-            &hex::decode("0000000000000000000000000000000000000001").unwrap()
-        ))]
-    );
-
-    // no arithmetic/bitwise allowed on address
-    // no ordered comparison allowed
-    // address 0x27b1fdb04752bbc536007a920d24acb045561C26 should be a warning
-}
-
-#[test]
-fn bytes() {
-    let mut runtime = build_solidity(
-        r##"
-        contract bar {
-            bytes4 constant foo = hex"11223344";
-
-            function get_foo() public returns (bytes4) {
-                return foo;
-            }
-
-            function bytes4asuint32() public view returns (uint32) {
-                return uint32(foo);
-            }
-
-            function bytes4asuint64() public view returns (uint64) {
-                return uint64(bytes8(foo));
-            }
-
-            function bytes4asbytes2() public view returns (bytes2) {
-                return bytes2(foo);
-            }
-
-            function passthrough(bytes4 bar) public view returns (bytes4) {
-                return bar;
-            }
-
-            function entry(uint index) public view returns (bytes1) {
-                return foo[index];
-            }
-
-            function entry2(uint index) public pure returns (bytes1) {
-                return hex"AABBCCDD"[index];
-            }
-
-            function shiftedleft() public view returns (bytes4) {
-                return foo << 8;
-            }
-
-            function shiftedright() public view returns (bytes4) {
-                return foo >> 8;
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("get_foo", &[]);
-
-    assert_eq!(
-        ret,
-        [ethabi::Token::FixedBytes(vec!(0x11, 0x22, 0x33, 0x44))]
-    );
-
-    let ret = runtime.function("bytes4asuint32", &[]);
-
-    assert_eq!(
-        ret,
-        [ethabi::Token::Uint(ethereum_types::U256::from(
-            0x11_22_33_44
-        ))]
-    );
-
-    let ret = runtime.function("bytes4asuint64", &[]);
-
-    assert_eq!(
-        ret,
-        [ethabi::Token::Uint(ethereum_types::U256::from(
-            0x1122_3344_0000_0000u64
-        ))]
-    );
-
-    let ret = runtime.function("bytes4asbytes2", &[]);
-
-    assert_eq!(ret, [ethabi::Token::FixedBytes(vec!(0x11, 0x22))]);
-
-    let val = vec![ethabi::Token::FixedBytes(vec![0x41, 0x42, 0x43, 0x44])];
-
-    assert_eq!(runtime.function("passthrough", &val), val);
-
-    let val = vec![ethabi::Token::Uint(ethereum_types::U256::from(1))];
-
-    let ret = runtime.function("entry", &val);
-
-    assert_eq!(ret, [ethabi::Token::FixedBytes(vec!(0x22))]);
-
-    let ret = runtime.function("entry2", &val);
-
-    assert_eq!(ret, [ethabi::Token::FixedBytes(vec!(0xBB))]);
-}
-
-#[test]
-fn array() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f(uint i1) public returns (int) {
-                int[8] bar = [ int(10), 20, 30, 4, 5, 6, 7, 8 ];
-
-                bar[2] = 0x7_f;
-
-                return bar[i1];
-            }
-
-            function bar() public returns (uint) {
-                uint[2][3][4] array;
-
-                return array.length;
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let val = vec![ethabi::Token::Uint(ethereum_types::U256::from(1))];
-
-    let ret = runtime.function("f", &val);
-
-    assert_eq!(ret, [ethabi::Token::Int(ethereum_types::U256::from(20))]);
-
-    let val = vec![ethabi::Token::Uint(ethereum_types::U256::from(2))];
-
-    let ret = runtime.function("f", &val);
-
-    assert_eq!(ret, [ethabi::Token::Int(ethereum_types::U256::from(127))]);
-
-    let ret = runtime.function("bar", &[]);
-
-    assert_eq!(ret, [ethabi::Token::Uint(ethereum_types::U256::from(4))]);
-}
-
-#[test]
-fn encode_array() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f(int32[4] a, uint i) public returns (int32) {
-                return a[i];
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let array = vec![
-        ethabi::Token::Int(ethereum_types::U256::from(0x20)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x40)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x80)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x100)),
-    ];
-
-    for i in 0..4 {
-        let ret = runtime.function(
-            "f",
-            &[
-                ethabi::Token::FixedArray(array.clone()),
-                ethabi::Token::Uint(ethereum_types::U256::from(i)),
-            ],
-        );
-        assert_eq!(ret, [array[i].clone()]);
-    }
-}
-
-#[test]
-#[should_panic]
-fn array_bounds_uint() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f(int32[4] a, uint i) public returns (int32) {
-                return a[i];
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let array = vec![
-        ethabi::Token::Int(ethereum_types::U256::from(0x20)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x40)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x80)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x100)),
-    ];
-
-    runtime.function(
-        "f",
-        &[
-            ethabi::Token::FixedArray(array),
-            ethabi::Token::Uint(ethereum_types::U256::from(4)),
-        ],
-    );
-}
-
-fn array_bounds_int(index: ethabi::Token) {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f(int32[4] a, int i) public returns (int32) {
-                return a[i];
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let array = vec![
-        ethabi::Token::Int(ethereum_types::U256::from(0x20)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x40)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x80)),
-        ethabi::Token::Int(ethereum_types::U256::from(0x100)),
-    ];
-
-    runtime.function("f", &[ethabi::Token::FixedArray(array), index]);
-}
-
-#[test]
-#[should_panic]
-fn array_bounds_int_neg() {
-    array_bounds_int(ethabi::Token::Int(ethereum_types::U256::from(-1)))
-}
-
-#[test]
-#[should_panic]
-fn array_bounds_int_pos() {
-    array_bounds_int(ethabi::Token::Int(ethereum_types::U256::from(4)))
-}
-
-#[test]
-fn array_array() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f(int a, uint i1, uint i2) public returns (int) {
-                    int[4][2] memory bar = [ [ int(1), 2, 3, 4 ], [ 5, 6, 7, a ] ];
-
-                    return bar[i1][i2];
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    for i1 in 0..2 {
-        for i2 in 0..4 {
-            let val = runtime.function(
-                "f",
-                &[
-                    ethabi::Token::Int(ethereum_types::U256::from(8)),
-                    ethabi::Token::Uint(ethereum_types::U256::from(i1)),
-                    ethabi::Token::Uint(ethereum_types::U256::from(i2)),
-                ],
-            );
-
-            println!("i1:{} i2:{}: {:?}", i1, i2, val);
-
-            assert_eq!(
-                val,
-                [ethabi::Token::Int(ethereum_types::U256::from(
-                    1 + 4 * i1 + i2
-                ))]
-            );
-        }
-    }
-}
-
-#[test]
-fn arrays_are_refs() {
-    // verified on remix
-    let mut runtime = build_solidity(
-        r##"
-        pragma solidity >=0.4.22 <0.6.0;
-
-        contract refs {
-            function f2(int[4] memory foo) private {
-                foo[2] = 2;
-            }
-
-            function f1(int[4] memory foo) private {
-                foo[1] = 2;
-            }
-
-            function bar() public returns (int[4] memory) {
-                int[4] memory x = [ int(0), 0, 0, 0 ];
-
-                f1(x);
-                f2(x);
-
-                return x;
-            }
-        }
-        "##,
-    );
-
-    runtime.constructor(&[]);
-
-    let val = runtime.function("bar", &[]);
-
-    assert_eq!(
-        val,
-        &[ethabi::Token::FixedArray(vec!(
-            ethabi::Token::Int(ethereum_types::U256::from(0)),
-            ethabi::Token::Int(ethereum_types::U256::from(2)),
-            ethabi::Token::Int(ethereum_types::U256::from(2)),
-            ethabi::Token::Int(ethereum_types::U256::from(0))
-        ))],
-    );
-}
-
-#[test]
-fn storage_structs() {
-    // verified on remix
-    let mut runtime = build_solidity(
-        r##"
-        /**
-         * This is a doccomment
-         */
-        pragma solidity 0;
-        pragma experimental ABIEncoderV2;
-
-        contract test_struct_parsing {
-            struct foo {
-                bool x;
-                uint32 y;
-            }
-
-            foo f;
-
-            function test() public {
-                f.x = true;
-                f.y = 64;
-
-                assert(f.x == true);
-                assert(f.y == 64);
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function("test", &[]);
-}
-
-#[test]
-fn struct_encode() {
-    let mut runtime = build_solidity(
-        r##"
-        contract structs {
-            struct foo {
-                bool x;
-                uint32 y;
-            }
-
-            function test(foo memory f) public {
-                assert(f.x == true);
-                assert(f.y == 64);
-            }
-        }
-        "##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function(
-        "test",
-        &[ethabi::Token::Tuple(vec![
-            ethabi::Token::Bool(true),
-            ethabi::Token::Uint(ethereum_types::U256::from(64)),
-        ])],
-    );
-}
-
-#[test]
-fn struct_dynamic_array_encode() {
-    let mut runtime = build_solidity(
-        r##"
-        contract structs {
-            struct foo {
-                bool x;
-                uint32 y;
-            }
-
-            function test() public returns (foo[]) {
-                foo[] x = new foo[](3);
-
-                x[0] = foo({x: true,y: 64});
-                x[1] = foo({x: false,y: 102});
-                x[2] = foo({x: true,y: 0x800});
-
-                return x;
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("test", &[]);
-
-    assert_eq!(
-        ret,
-        vec![ethabi::Token::Array(vec![
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Bool(true),
-                ethabi::Token::Uint(ethereum_types::U256::from(64))
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Bool(false),
-                ethabi::Token::Uint(ethereum_types::U256::from(102))
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Bool(true),
-                ethabi::Token::Uint(ethereum_types::U256::from(0x800)),
-            ])
-        ])],
-    );
-}
-
-#[test]
-fn struct_decode() {
-    let mut runtime = build_solidity(
-        r##"
-        contract structs {
-            struct foo {
-                bool x;
-                uint32 y;
-            }
-
-            function test() public returns (foo) {
-                foo f;
-
-                f.x = true;
-                f.y = 64;
-
-                return f;
-            }
-        }
-        "##,
-    );
-
-    runtime.constructor(&[]);
-
-    let val = runtime.function("test", &[]);
-
-    assert_eq!(
-        val,
-        &[ethabi::Token::Tuple(vec![
-            ethabi::Token::Bool(true),
-            ethabi::Token::Uint(ethereum_types::U256::from(64)),
-        ])],
-    );
-}
-
-/* TODO: find out why this test fails.
-#[test]
-fn struct_in_struct_decode() {
-    let mut runtime = build_solidity(
-        r##"
-        contract structs {
-            enum suit { club, diamonds, hearts, spades }
-            enum value { two, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace }
-            struct card {
-                value v;
-                suit s;
-            }
-            struct hand {
-                card card1;
-                card card2;
-                card card3;
-                card card4;
-                card card5;
-            }
-            function test() public returns (hand) {
-                hand h = hand({
-                    card1: card({ s: suit.hearts, v: value.two }),
-                    card2: card({ s: suit.diamonds, v: value.three }),
-                    card3: card({ s: suit.club, v: value.four }),
-                    card4: card({ s: suit.diamonds, v: value.ten }),
-                    card5: card({ s: suit.hearts, v: value.jack })
-                });
-                return h;
-            }
-        }
-        "##,
-    );
-
-    runtime.constructor(&[]);
-
-    let val = runtime.function("test", &[]);
-
-    assert_eq!(
-        val,
-        &[ethabi::Token::Tuple(vec![
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(0)),
-                ethabi::Token::Uint(ethereum_types::U256::from(2)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(1)),
-                ethabi::Token::Uint(ethereum_types::U256::from(1)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(2)),
-                ethabi::Token::Uint(ethereum_types::U256::from(0)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(8)),
-                ethabi::Token::Uint(ethereum_types::U256::from(1)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(9)),
-                ethabi::Token::Uint(ethereum_types::U256::from(2)),
-            ]),
-        ])],
-    );
-}*/
-
-#[test]
-fn struct_in_struct_encode() {
-    let mut runtime = build_solidity(
-        r##"
-        contract structs {
-            enum suit { club, diamonds, hearts, spades }
-            enum value { two, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace }
-            struct card {
-                value v;
-                suit s;
-            }
-            struct hand {
-                card card1;
-                card card2;
-                card card3;
-                card card4;
-                card card5;
-            }
-
-            function test(hand h) public {
-                assert(h.card1.s == suit.hearts);
-                assert(h.card1.v == value.two);
-                assert(h.card2.s == suit.diamonds);
-                assert(h.card2.v == value.three);
-                assert(h.card3.s == suit.club);
-                assert(h.card3.v == value.four);
-                assert(h.card4.s == suit.diamonds);
-                assert(h.card4.v == value.ten);
-                assert(h.card5.s == suit.hearts);
-                assert(h.card5.v == value.jack);
-            }
-        }
-        "##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function(
-        "test",
-        &[ethabi::Token::Tuple(vec![
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(0)),
-                ethabi::Token::Uint(ethereum_types::U256::from(2)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(1)),
-                ethabi::Token::Uint(ethereum_types::U256::from(1)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(2)),
-                ethabi::Token::Uint(ethereum_types::U256::from(0)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(8)),
-                ethabi::Token::Uint(ethereum_types::U256::from(1)),
-            ]),
-            ethabi::Token::Tuple(vec![
-                ethabi::Token::Uint(ethereum_types::U256::from(9)),
-                ethabi::Token::Uint(ethereum_types::U256::from(2)),
-            ]),
-        ])],
-    );
-}
-
-#[test]
-fn array_push_delete() {
-    // ensure that structs and fixed arrays are wiped by delete
-    let mut runtime = build_solidity(
-        r#"
-        pragma solidity 0;
-
-        contract foo {
-            uint32[] bar;
-
-            function setup() public {
-                for (uint32 i = 0; i < 105; i++) {
-                    bar.push(i + 0x8000);
-                }
-            }
-
-            function clear() public {
-                delete bar;
-            }
-        }"#,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function("setup", &[]);
-
-    assert_eq!(runtime.store.len(), 106);
-
-    runtime.function("clear", &[]);
-
-    assert_eq!(runtime.store.len(), 0);
-}
-
-#[test]
-fn encode_string() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f() public returns (string) {
-                return "Hello, World!";
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("f", &[]);
-    assert_eq!(ret, vec!(ethabi::Token::String("Hello, World!".to_owned())));
-
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f() public returns (int32, string, int64) {
-                return (105, "the quick brown dog jumps over the lazy fox", -563);
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("f", &[]);
-
-    let n563 = ethereum_types::U256::from(0)
-        .overflowing_sub(ethereum_types::U256::from(563))
-        .0;
-
-    assert_eq!(
-        ret,
-        vec!(
-            ethabi::Token::Int(ethereum_types::U256::from(105)),
-            ethabi::Token::String("the quick brown dog jumps over the lazy fox".to_owned()),
-            ethabi::Token::Int(n563),
-        )
-    );
-}
-
-#[test]
-fn decode_string() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f(string a) public returns (string) {
-                return a + " ";
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("f", &[ethabi::Token::String("Hello, World!".to_owned())]);
-
-    assert_eq!(
-        ret,
-        vec!(ethabi::Token::String("Hello, World! ".to_owned()))
-    );
-}
-
-#[test]
-fn revert() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            function f() public {
-                revert("Hello, World!");
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function_revert("f", &[]);
-    assert_eq!(ret, Some("Hello, World!".to_owned()));
-}
-
-#[test]
-fn constructor_args() {
-    let mut runtime = build_solidity(
-        r##"
-        contract foo {
-            int64 v;
-
-            constructor(int64 a) public {
-                v = a;
-            }
-
-            function f() public returns (int64) {
-                return v;
-            }
-        }"##,
-    );
-
-    let v = ethabi::Token::Int(ethereum_types::U256::from(105));
-
-    runtime.constructor(&[v.clone()]);
-
-    let ret = runtime.function("f", &[]);
-    assert_eq!(ret, vec!(v));
-}
-
-#[test]
-fn create() {
-    let mut runtime = build_solidity(
-        r##"
-        contract a {
-            int32 x;
-            constructor() public {
-            }
-
-            function test() public {
-                x = 102;
-            }
-        }
-
-        contract b {
-            function x() public {
-                a r = new a();
-            }
-        }
-        "##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function("x", &[]);
-}
-
-#[test]
-fn decode_complexish() {
-    let mut runtime = build_solidity(
-        r##"
-        pragma solidity 0;
-
-        struct foo1 {
-            int32 f1;
-            string f2;
-            int64[2] f3;
-            int64[] f4;
-        }
-
-        contract c {
-            function test(foo1[] a) public {
-                assert(a.length == 1);
-                assert(a[0].f2 == "Hello, World!");
-                assert(a[0].f3[0] == 55);
-                assert(a[0].f3[1] == 59);
-                assert(a[0].f4.length == 1);
-                assert(a[0].f4[0] == 102);
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function(
-        "test",
-        &[ethabi::Token::Array(vec![ethabi::Token::Tuple(vec![
-            ethabi::Token::Int(ethereum_types::U256::from(102)),
-            ethabi::Token::String("Hello, World!".to_owned()),
-            ethabi::Token::FixedArray(vec![
-                ethabi::Token::Int(ethereum_types::U256::from(55)),
-                ethabi::Token::Int(ethereum_types::U256::from(59)),
-            ]),
-            ethabi::Token::Array(vec![ethabi::Token::Int(ethereum_types::U256::from(102))]),
-        ])])],
-    );
-}
-
-#[test]
-fn decode_bad_abi() {
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            function test(string a) public {
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    // patch offset to be garbage
-    runtime.function_abi_fail(
-        "test",
-        &[ethabi::Token::String("Hello, World!".to_owned())],
-        |x| x[30] = 2,
-    );
-
-    // patch offset to overflow
-    runtime.function_abi_fail(
-        "test",
-        &[ethabi::Token::String("Hello, World!".to_owned())],
-        |x| {
-            x[31] = 0xff;
-            x[30] = 0xff;
-            x[29] = 0xff;
-            x[28] = 0xe0;
-        },
-    );
-
-    // patch length to be garbage
-    runtime.function_abi_fail(
-        "test",
-        &[ethabi::Token::String("Hello, World!".to_owned())],
-        |x| x[62] = 2,
-    );
-
-    // patch length to overflow
-    runtime.function_abi_fail(
-        "test",
-        &[ethabi::Token::String("Hello, World!".to_owned())],
-        |x| {
-            x[63] = 0xff;
-            x[62] = 0xff;
-            x[61] = 0xff;
-            x[60] = 0xe0;
-        },
-    );
-}
-
-#[test]
-fn external_call() {
-    let mut runtime = build_solidity(
-        r##"
-        contract b {
-            int32 x;
-
-            constructor(int32 a) public {
-                x = a;
-            }
-
-            function get_x() public returns (int32) {
-                return 200 * x;
-            }
-        }
-
-        contract c {
-            b x;
-
-            constructor() public {
-                x = new b(102);
-            }
-
-            function test() public returns (int32) {
-                return x.get_x();
-            }
-
-            function enc() public returns (bytes) {
-                return abi.encodeWithSignature("get_x()");
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("enc", &[]);
-
-    assert_eq!(
-        ret,
-        vec!(ethabi::Token::Bytes(0x3829050au32.to_be_bytes().into()))
-    );
-
-    let ret = runtime.function("test", &[]);
-
-    assert_eq!(
-        ret,
-        vec!(ethabi::Token::Int(ethereum_types::U256::from(20400)))
-    );
-
-    let mut runtime = build_solidity(
-        r##"
-        contract b {
-            int32 x;
-
-            constructor(int32 a) public {
-                x = a;
-            }
-
-            function get_x(int32 t) public returns (int32) {
-                return x * t;
-            }
-        }
-
-        contract c {
-            b x;
-
-            constructor() public {
-                x = new b(102);
-            }
-
-            function test() public returns (int32) {
-                return x.get_x({ t: 10 });
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("test", &[]);
-
-    assert_eq!(
-        ret,
-        vec!(ethabi::Token::Int(ethereum_types::U256::from(1020)))
-    );
-}
-
-#[test]
-fn try_catch() {
-    let mut runtime = build_solidity(
-        r##"
-        contract b {
-            int32 x;
-
-            constructor(int32 a) public {
-                x = a;
-            }
-
-            function get_x(int32 t) public returns (int32) {
-                if (t == 0) {
-                    revert("cannot be zero");
-                }
-                return x * t;
-            }
-        }
-
-        contract c {
-            b x;
-
-            constructor() public {
-                x = new b(102);
-            }
-
-            function test() public returns (int32) {
-                int32 state = 0;
-                try x.get_x(0) returns (int32 l) {
-                    state = 1;
-                } catch Error(string err) {
-                    if (err == "cannot be zero") {
-                        state = 2;
-                    } else {
-                        state = 3;
-                    }
-                } catch (bytes ) {
-                    state = 4;
-                }
-
-                return state;
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    let ret = runtime.function("test", &[]);
-
-    assert_eq!(ret, vec!(ethabi::Token::Int(ethereum_types::U256::from(2))));
-}
-
-#[test]
-fn payables() {
-    // no contructors means can't send value
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            function test(string a) public {
-            }
-        }"##,
-    );
-
-    runtime.value = 1;
-    runtime.constructor_expect_revert(&[]);
-
-    // contructors w/o payable means can't send value
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            constructor() public {
-                int32 a = 0;
-            }
-
-            function test(string a) public {
-            }
-        }"##,
-    );
-
-    runtime.value = 1;
-    runtime.constructor_expect_revert(&[]);
-
-    // contructors w/ payable means can send value
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            constructor() public payable {
-                int32 a = 0;
-            }
-
-            function test(string a) public {
-            }
-        }"##,
-    );
-
-    runtime.value = 1;
-    runtime.constructor(&[]);
-
-    // function w/o payable means can't send value
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            function test() public {
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-    runtime.value = 1;
-    runtime.function_revert("test", &[]);
-
-    // test both
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            function test() payable public {
-            }
-            function test2() public {
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-    runtime.value = 1;
-    runtime.function_revert("test2", &[]);
-    runtime.value = 1;
-    runtime.function("test", &[]);
-}
-
-#[test]
-fn balance() {
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            function test() public returns (uint128) {
-                return address(this).balance;
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.accounts.get_mut(&runtime.vm.cur).unwrap().1 = 512;
-    let ret = runtime.function("test", &[]);
-
-    assert_eq!(
-        ret,
-        vec!(ethabi::Token::Uint(ethereum_types::U256::from(512)))
-    );
-}
-
-#[test]
-fn selfdestruct() {
-    let mut runtime = build_solidity(
-        r##"
-        contract other {
-            function goaway(address payable recipient) public returns (bool) {
-                selfdestruct(recipient);
-            }
-        }
-
-        contract c {
-            other o;
-            function step1() public {
-                o = new other{value: 511}();
-            }
-
-            function step2() public {
-                bool foo = o.goaway(payable(address(this)));
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function("step1", &[]);
-    runtime.accounts.get_mut(&runtime.vm.cur).unwrap().1 = 0;
-
-    runtime.function_revert("step2", &[]);
-    runtime.accounts.get_mut(&runtime.vm.cur).unwrap().1 = 511;
-}
-
-#[test]
-fn event() {
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            event foo (
-                bool indexed y,
-                int32 x
-            ) anonymous;
-
-            function func() public {
-                emit foo(true, 102);
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function("func", &[]);
-
-    assert_eq!(runtime.events.len(), 1);
-
-    let event = &runtime.abi.events_by_name("foo").unwrap()[0];
-
-    for log in runtime.events() {
-        let decoded = event.parse_log(log).unwrap();
-
-        for log in &decoded.params {
-            match log.name.as_str() {
-                "y" => assert_eq!(log.value, ethabi::Token::Bool(true)),
-                "x" => assert_eq!(
-                    log.value,
-                    ethabi::Token::Int(ethereum_types::U256::from(102))
-                ),
-                _ => panic!("unexpected field {}", log.name),
-            }
-        }
-    }
-
-    let mut runtime = build_solidity(
-        r##"
-        contract c {
-            event foo (
-                bool indexed y,
-                string indexed x,
-                int[2] indexed z
-            );
-
-            function func() public {
-                emit foo(true, "foobar", [1, 2]);
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-
-    runtime.function("func", &[]);
-
-    assert_eq!(runtime.events.len(), 1);
-
-    let event = &runtime.abi.events_by_name("foo").unwrap()[0];
-
-    for log in runtime.events() {
-        let decoded = event.parse_log(log).unwrap();
-
-        for log in &decoded.params {
-            match log.name.as_str() {
-                "y" => assert_eq!(log.value, ethabi::Token::Bool(true)),
-                "x" => assert_eq!(
-                    log.value,
-                    ethabi::Token::FixedBytes(
-                        hex::decode(
-                            "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e"
-                        )
-                        .unwrap()
-                    )
-                ),
-                "z" => assert_eq!(
-                    log.value,
-                    ethabi::Token::FixedBytes(
-                        hex::decode(
-                            "e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0"
-                        )
-                        .unwrap()
-                    )
-                ),
-                _ => panic!("unexpected field {}", log.name),
-            }
-        }
-    }
-}

+ 0 - 89
tests/ewasm_tests/abi.rs

@@ -1,89 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use crate::build_solidity;
-use ethabi::{encode, ethereum_types::U256, Token};
-
-#[test]
-fn abi_encode() {
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function test() public returns (bytes) {
-                return abi.encode(true, "foobar");
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    let returns = vm.function("test", &[]);
-
-    let bytes = encode(&[Token::Bool(true), Token::String(String::from("foobar"))]);
-
-    assert_eq!(returns, vec![Token::Bytes(bytes)]);
-
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function test() public returns (bytes) {
-                bytes4 h = "ABCD";
-                return abi.encodeWithSelector(0x04030201, int(102), h);
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    let returns = vm.function("test", &[]);
-
-    let mut bytes = vec![4, 3, 2, 1];
-
-    bytes.extend(
-        encode(&[
-            Token::Int(U256::from(102)),
-            Token::FixedBytes(b"ABCD".to_vec()),
-        ])
-        .iter(),
-    );
-
-    assert_eq!(returns, vec![Token::Bytes(bytes)]);
-}
-
-#[test]
-fn selector_override() {
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function test() public selector=hex"00000001" returns (uint) {
-                return 102;
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    vm.raw_function(vec![0, 0, 0, 1]);
-
-    let returns = vm.abi.functions["test"][0]
-        .decode_output(&vm.vm.output)
-        .unwrap();
-
-    assert_eq!(returns, vec![Token::Uint(U256::from(102))]);
-}
-
-#[test]
-#[should_panic(expected = "fail to invoke main: revert")]
-fn cannot_use_old_selector() {
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function test() public selector=hex"00000001" returns (uint) {
-                return 102;
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    vm.function_abi_fail("test", &[], |_| ());
-}

+ 0 - 63
tests/ewasm_tests/crypto.rs

@@ -1,63 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use crate::build_solidity;
-
-#[test]
-fn hash_tests() {
-    let mut runtime = build_solidity(
-        r##"
-        contract tester {
-            function test() public {
-                bytes32 hash = keccak256("Hello, World!");
-
-                assert(hash == hex"acaf3289d7b601cbd114fb36c4d29c85bbfd5e133f14cb355c3fd8d99367964f");
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-    runtime.function("test", &[]);
-
-    let mut runtime = build_solidity(
-        r##"
-        contract tester {
-            function test() public {
-                bytes memory s = "Hello, World!";
-                bytes32 hash = keccak256(s);
-
-                assert(hash == hex"acaf3289d7b601cbd114fb36c4d29c85bbfd5e133f14cb355c3fd8d99367964f");
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-    runtime.function("test", &[]);
-
-    let mut runtime = build_solidity(
-        r##"
-        contract tester {
-            function test() public {
-                bytes32 hash = sha256("Hello, World!");
-
-                assert(hash == hex"dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f");
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-    runtime.function("test", &[]);
-
-    let mut runtime = build_solidity(
-        r##"
-        contract tester {
-            function test() public {
-                bytes20 hash = ripemd160("Hello, World!");
-
-                assert(hash == hex"527a6a4b9a6da75607546842e0e00105350b1aaf");
-            }
-        }"##,
-    );
-
-    runtime.constructor(&[]);
-    runtime.function("test", &[]);
-}

+ 0 - 7
tests/ewasm_tests/mod.rs

@@ -1,7 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-mod abi;
-mod crypto;
-mod modifiers;
-mod primitives;
-mod yul;

+ 0 - 48
tests/ewasm_tests/modifiers.rs

@@ -1,48 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use crate::{address_new, build_solidity};
-
-#[test]
-fn issue_623() {
-    let mut vm = build_solidity(
-        r#"
-        contract Missing{
-            address payable private owner;
-
-            modifier onlyowner {
-                require(msg.sender==owner, "Go away");
-                _;
-            }
-
-            constructor()
-                public
-            {
-                owner = payable(msg.sender);
-            }
-
-            receive () external payable {}
-
-            function withdraw()
-                public
-                onlyowner
-            {
-                owner.transfer(payable(this).balance);
-            }
-
-            function checkmod()
-            public
-            onlyowner
-            {}
-    }"#,
-    );
-
-    vm.constructor(&[]);
-
-    vm.function("checkmod", &[]);
-
-    vm.caller = address_new();
-
-    let revert = vm.function_revert("checkmod", &[]);
-
-    assert_eq!(revert, Some(String::from("Go away")));
-}

+ 0 - 752
tests/ewasm_tests/primitives.rs

@@ -1,752 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use crate::build_solidity;
-use ethabi::ethereum_types::{Address, U256};
-use num_bigint::{BigInt, BigUint};
-use rand::Rng;
-use std::ops::Add;
-use std::ops::BitAnd;
-use std::ops::Div;
-use std::ops::Mul;
-use std::ops::Rem;
-use std::ops::Shl;
-use std::ops::Shr;
-use std::ops::Sub;
-use std::str::FromStr;
-
-#[test]
-#[should_panic]
-fn assert_false() {
-    // without a working assert, this is not going to work
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function assert_fails() public {
-                require(false, "humpty-dumpty");
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    vm.function("assert_fails", &[]);
-}
-
-#[test]
-fn assert_true() {
-    // without a working assert, this is not going to work
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function assert_fails() public {
-                require(true, "humpty-dumpty");
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    vm.function("assert_fails", &[]);
-}
-
-#[test]
-fn boolean() {
-    // we need to test: literals
-    // passing address around
-    // abi encoding/decoding address
-    // comparing address to another
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function return_true() public returns (bool) {
-                return true;
-            }
-
-            function return_false() public returns (bool) {
-                return false;
-            }
-
-            function true_arg(bool b) public {
-                assert(b);
-            }
-
-            function false_arg(bool b) public {
-                assert(!b);
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    let returns = vm.function("return_true", &[]);
-
-    assert_eq!(returns, vec![ethabi::Token::Bool(true),]);
-
-    let returns = vm.function("return_false", &[]);
-
-    assert_eq!(returns, vec![ethabi::Token::Bool(false),]);
-
-    vm.function("true_arg", &[ethabi::Token::Bool(true)]);
-    vm.function("false_arg", &[ethabi::Token::Bool(false)]);
-}
-
-#[test]
-fn address() {
-    // we need to test: literals
-    // passing address around
-    // abi encoding/decoding address
-    // comparing address to another
-
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            function return_address() public returns (address) {
-                return 0xE0f5206BBD039e7b0592d8918820024e2a7437b9;
-            }
-
-            function address_arg(address a) public {
-                assert(a == 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c);
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    let returns = vm.function("return_address", &[]);
-
-    assert_eq!(
-        returns,
-        vec![ethabi::Token::Address(
-            Address::from_str("E0f5206BBD039e7b0592d8918820024e2a7437b9").unwrap()
-        )]
-    );
-
-    vm.function(
-        "address_arg",
-        &[ethabi::Token::Address(
-            Address::from_str("CA35b7d915458EF540aDe6068dFe2F44E8fa733c").unwrap(),
-        )],
-    );
-}
-
-#[test]
-fn test_enum() {
-    // we need to test enum literals
-    // abi encoding/decode literals
-    // comparing enums
-
-    let mut vm = build_solidity(
-        r#"
-        contract foo {
-            enum bar { bar0, bar1, bar2, bar3, bar4, bar5, bar6, bar7, bar8, bar9, bar10 }
-
-            function return_enum() public returns (bar) {
-                return bar.bar9;
-            }
-
-            function enum_arg(bar a) public {
-                assert(a == bar.bar6);
-            }
-        }"#,
-    );
-
-    vm.constructor(&[]);
-
-    let returns = vm.function("return_enum", &[]);
-
-    assert_eq!(returns, vec![ethabi::Token::Uint(U256::from(9))]);
-
-    vm.function("enum_arg", &[ethabi::Token::Uint(U256::from(6))]);
-}
-
-#[test]
-fn bytes() {
-    let mut rng = rand::thread_rng();
-
-    for width in 1..32 {
-        let src = r#"
-        contract test {
-            function return_literal() public returns (bytes7) {
-                return hex"01020304050607";
-            }
-
-            function return_arg(bytes7 x) public returns (bytes7) {
-                return x;
-            }
-
-            function or(bytesN a, bytesN b) public returns (bytesN) {
-                return a | b;
-            }
-
-            function and(bytesN a, bytesN b) public returns (bytesN) {
-                return a & b;
-            }
-
-            function xor(bytesN a, bytesN b) public returns (bytesN) {
-                return a ^ b;
-            }
-
-            function shift_left(bytesN a, uint32 r) public returns (bytesN) {
-                return a << r;
-            }
-
-            function shift_right(bytesN a, uint32 r) public returns (bytesN) {
-                return a >> r;
-            }
-        }"#
-        .replace("bytesN", &format!("bytes{}", width));
-
-        let mut vm = build_solidity(&src);
-
-        vm.constructor(&[]);
-
-        let returns = vm.function("return_literal", &[]);
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::FixedBytes(vec![1, 2, 3, 4, 5, 6, 7]),]
-        );
-
-        let returns = vm.function(
-            "return_arg",
-            &[ethabi::Token::FixedBytes(vec![1, 2, 3, 4, 5, 6, 7])],
-        );
-
-        assert_eq!(
-            returns,
-            vec![ethabi::Token::FixedBytes(vec![1, 2, 3, 4, 5, 6, 7])]
-        );
-
-        for _ in 0..10 {
-            let mut a = Vec::new();
-            let mut b = Vec::new();
-
-            a.resize(width, 0);
-            b.resize(width, 0);
-
-            rng.fill(&mut a[..]);
-            rng.fill(&mut b[..]);
-
-            let or = vm.function(
-                "or",
-                &[
-                    ethabi::Token::FixedBytes(a.to_vec()),
-                    ethabi::Token::FixedBytes(b.to_vec()),
-                ],
-            );
-
-            let res: Vec<u8> = a.iter().zip(b.iter()).map(|(a, b)| a | b).collect();
-
-            println!(
-                "{} | {} = {}",
-                hex::encode(&a),
-                hex::encode(&b),
-                hex::encode(&res)
-            );
-
-            assert_eq!(or, vec![ethabi::Token::FixedBytes(res)]);
-
-            let and = vm.function(
-                "and",
-                &[
-                    ethabi::Token::FixedBytes(a.to_vec()),
-                    ethabi::Token::FixedBytes(b.to_vec()),
-                ],
-            );
-
-            let res: Vec<u8> = a.iter().zip(b.iter()).map(|(a, b)| a & b).collect();
-
-            assert_eq!(and, vec![ethabi::Token::FixedBytes(res)]);
-
-            let xor = vm.function(
-                "xor",
-                &[
-                    ethabi::Token::FixedBytes(a.to_vec()),
-                    ethabi::Token::FixedBytes(b.to_vec()),
-                ],
-            );
-
-            let res: Vec<u8> = a.iter().zip(b.iter()).map(|(a, b)| a ^ b).collect();
-
-            assert_eq!(xor, vec![ethabi::Token::FixedBytes(res)]);
-
-            let r = rng.gen::<u32>() % (width as u32 * 8);
-
-            println!("w = {} r = {}", width, r);
-
-            let shl = vm.function(
-                "shift_left",
-                &[
-                    ethabi::Token::FixedBytes(a.to_vec()),
-                    ethabi::Token::Uint(U256::from(r)),
-                ],
-            );
-
-            let mut res = (BigUint::from_bytes_be(&a) << r).to_bytes_be();
-
-            while res.len() > width {
-                res.remove(0);
-            }
-
-            while res.len() < width {
-                res.insert(0, 0);
-            }
-
-            assert_eq!(shl, vec![ethabi::Token::FixedBytes(res)]);
-
-            let shr = vm.function(
-                "shift_right",
-                &[
-                    ethabi::Token::FixedBytes(a.to_vec()),
-                    ethabi::Token::Uint(U256::from(r)),
-                ],
-            );
-
-            let mut res = (BigUint::from_bytes_be(&a) >> r).to_bytes_be();
-
-            while res.len() < width {
-                res.insert(0, 0);
-            }
-
-            assert_eq!(shr, vec![ethabi::Token::FixedBytes(res)]);
-        }
-    }
-}
-
-#[test]
-fn uint() {
-    let mut rng = rand::thread_rng();
-
-    for width in (8..=256).step_by(8) {
-        let src = r#"
-        contract test {
-            function add(uintN a, uintN b) public returns (uintN) {
-                return a + b;
-            }
-
-            function sub(uintN a, uintN b) public returns (uintN) {
-                return a - b;
-            }
-
-            function mul(uintN a, uintN b) public returns (uintN) {
-                return a * b;
-            }
-
-            function div(uintN a, uintN b) public returns (uintN) {
-                return a / b;
-            }
-
-            function mod(uintN a, uintN b) public returns (uintN) {
-                return a % b;
-            }
-
-            function pow(uintN a, uintN b) public returns (uintN) {
-                return a ** b;
-            }
-
-            function or(uintN a, uintN b) public returns (uintN) {
-                return a | b;
-            }
-
-            function and(uintN a, uintN b) public returns (uintN) {
-                return a & b;
-            }
-
-            function xor(uintN a, uintN b) public returns (uintN) {
-                return a ^ b;
-            }
-
-            function shift_left(uintN a, uint32 r) public returns (uintN) {
-                return a << r;
-            }
-
-            function shift_right(uintN a, uint32 r) public returns (uintN) {
-                return a >> r;
-            }
-        }"#
-        .replace("uintN", &format!("uint{}", width));
-
-        let mut vm = build_solidity(&src);
-
-        vm.constructor(&[]);
-
-        for _ in 0..10 {
-            let mut a = Vec::new();
-            let mut b = Vec::new();
-
-            a.resize(width / 8, 0);
-            b.resize(width / 8, 0);
-
-            rng.fill(&mut a[..]);
-            rng.fill(&mut b[..]);
-
-            let mut a = U256::from_big_endian(&a);
-            let mut b = U256::from_big_endian(&b);
-
-            rng.fill(&mut a.0[..]);
-            rng.fill(&mut b.0[..]);
-
-            truncate_uint(&mut a, width);
-            truncate_uint(&mut b, width);
-
-            let add = vm.function("add", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let (mut res, _) = a.overflowing_add(b);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(add, vec![ethabi::Token::Uint(res)]);
-
-            let sub = vm.function("sub", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let (mut res, _) = a.overflowing_sub(b);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(sub, vec![ethabi::Token::Uint(res)]);
-
-            let mul = vm.function("mul", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let (mut res, _) = a.overflowing_mul(b);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(mul, vec![ethabi::Token::Uint(res)]);
-
-            let pow = vm.function("pow", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let (mut res, _) = a.overflowing_pow(b);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(pow, vec![ethabi::Token::Uint(res)]);
-
-            if b != U256::zero() {
-                let div = vm.function("div", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-                let mut res = a.div(b);
-
-                truncate_uint(&mut res, width);
-
-                assert_eq!(div, vec![ethabi::Token::Uint(res)]);
-
-                let remainder =
-                    vm.function("mod", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-                let mut res = a.rem(b);
-
-                truncate_uint(&mut res, width);
-
-                assert_eq!(remainder, vec![ethabi::Token::Uint(res)]);
-            }
-
-            let or = vm.function("or", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let mut res = U256([
-                a.0[0] | b.0[0],
-                a.0[1] | b.0[1],
-                a.0[2] | b.0[2],
-                a.0[3] | b.0[3],
-            ]);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(or, vec![ethabi::Token::Uint(res)]);
-
-            let and = vm.function("and", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let mut res = U256([
-                a.0[0] & b.0[0],
-                a.0[1] & b.0[1],
-                a.0[2] & b.0[2],
-                a.0[3] & b.0[3],
-            ]);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(and, vec![ethabi::Token::Uint(res)]);
-
-            let xor = vm.function("xor", &[ethabi::Token::Uint(a), ethabi::Token::Uint(b)]);
-
-            let mut res = U256([
-                a.0[0] ^ b.0[0],
-                a.0[1] ^ b.0[1],
-                a.0[2] ^ b.0[2],
-                a.0[3] ^ b.0[3],
-            ]);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(xor, vec![ethabi::Token::Uint(res)]);
-
-            let r = rng.gen::<u32>() % (width as u32);
-
-            let shl = vm.function(
-                "shift_left",
-                &[ethabi::Token::Uint(a), ethabi::Token::Uint(U256::from(r))],
-            );
-
-            let mut res = a.shl(r);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(shl, vec![ethabi::Token::Uint(res)]);
-
-            let shr = vm.function(
-                "shift_right",
-                &[ethabi::Token::Uint(a), ethabi::Token::Uint(U256::from(r))],
-            );
-
-            let mut res = a.shr(r);
-
-            truncate_uint(&mut res, width);
-
-            assert_eq!(shr, vec![ethabi::Token::Uint(res)]);
-        }
-    }
-}
-
-fn truncate_uint(n: &mut U256, width: usize) {
-    let mut bits = 256 - width;
-
-    let mut offset = 3;
-
-    while bits > 64 {
-        n.0[offset] = 0;
-
-        offset -= 1;
-        bits -= 64;
-    }
-
-    if bits > 0 {
-        n.0[offset] &= (1 << (64 - bits)) - 1;
-    }
-}
-
-#[test]
-fn int() {
-    let mut rng = rand::thread_rng();
-
-    for width in (8..=256).step_by(8) {
-        let src = r#"
-        contract test {
-            function add(intN a, intN b) public returns (intN) {
-                return a + b;
-            }
-
-            function sub(intN a, intN b) public returns (intN) {
-                return a - b;
-            }
-
-            function mul(intN a, intN b) public returns (intN) {
-                return a * b;
-            }
-
-            function div(intN a, intN b) public returns (intN) {
-                 return a / b;
-            }
-
-            function mod(intN a, intN b) public returns (intN) {
-                return a % b;
-            }
-
-            function or(intN a, intN b) public returns (intN) {
-                return a | b;
-            }
-
-            function and(intN a, intN b) public returns (intN) {
-                return a & b;
-            }
-
-            function xor(intN a, intN b) public returns (intN) {
-                return a ^ b;
-            }
-
-            function shift_left(intN a, uint32 r) public returns (intN) {
-                return a << r;
-            }
-
-            function shift_right(intN a, uint32 r) public returns (intN) {
-                return a >> r;
-            }
-        }"#
-        .replace("intN", &format!("int{}", width));
-
-        let mut vm = build_solidity(&src);
-
-        vm.constructor(&[]);
-
-        for _ in 0..10 {
-            let mut a_bs = Vec::new();
-            let mut b_bs = Vec::new();
-
-            a_bs.resize(width / 8, 0);
-            b_bs.resize(width / 8, 0);
-
-            rng.fill(&mut a_bs[..]);
-            rng.fill(&mut b_bs[..]);
-
-            let mut a = U256::from_big_endian(&a_bs);
-            let mut b = U256::from_big_endian(&b_bs);
-
-            truncate_int(&mut a, width);
-            truncate_int(&mut b, width);
-
-            let big_a = eth_to_bigint(&a, width);
-            let big_b = eth_to_bigint(&b, width);
-
-            let add = vm.function("add", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-            let res = big_a.clone().add(&big_b);
-
-            let res = bigint_to_eth(&res, width);
-
-            assert_eq!(add, vec![ethabi::Token::Int(res)]);
-
-            let sub = vm.function("sub", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-            let res = bigint_to_eth(&big_a.clone().sub(&big_b), width);
-
-            assert_eq!(sub, vec![ethabi::Token::Int(res)]);
-
-            let mul = vm.function("mul", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-            let res = bigint_to_eth(&big_a.clone().mul(&big_b), width);
-
-            assert_eq!(mul, vec![ethabi::Token::Int(res)]);
-
-            if b != U256::zero() {
-                let div = vm.function("div", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-                let res = bigint_to_eth(&big_a.clone().div(&big_b), width);
-
-                assert_eq!(div, vec![ethabi::Token::Int(res)]);
-
-                let remainder = vm.function("mod", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-                let res = big_a.clone().rem(&big_b);
-
-                let res = bigint_to_eth(&res, width);
-
-                assert_eq!(remainder, vec![ethabi::Token::Int(res)]);
-            }
-
-            let or = vm.function("or", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-            let mut res = U256([
-                a.0[0] | b.0[0],
-                a.0[1] | b.0[1],
-                a.0[2] | b.0[2],
-                a.0[3] | b.0[3],
-            ]);
-
-            truncate_int(&mut res, width);
-
-            assert_eq!(or, vec![ethabi::Token::Int(res)]);
-
-            let and = vm.function("and", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-            let mut res = U256([
-                a.0[0] & b.0[0],
-                a.0[1] & b.0[1],
-                a.0[2] & b.0[2],
-                a.0[3] & b.0[3],
-            ]);
-
-            truncate_int(&mut res, width);
-
-            assert_eq!(and, vec![ethabi::Token::Int(res)]);
-
-            let xor = vm.function("xor", &[ethabi::Token::Int(a), ethabi::Token::Int(b)]);
-
-            let mut res = U256([
-                a.0[0] ^ b.0[0],
-                a.0[1] ^ b.0[1],
-                a.0[2] ^ b.0[2],
-                a.0[3] ^ b.0[3],
-            ]);
-
-            truncate_int(&mut res, width);
-
-            assert_eq!(xor, vec![ethabi::Token::Int(res)]);
-
-            let r = rng.gen::<u32>() % (width as u32);
-
-            let shl = vm.function(
-                "shift_left",
-                &[ethabi::Token::Int(a), ethabi::Token::Uint(U256::from(r))],
-            );
-
-            let mut res = a.shl(r);
-
-            truncate_int(&mut res, width);
-
-            assert_eq!(shl, vec![ethabi::Token::Int(res)]);
-
-            let shr = vm.function(
-                "shift_right",
-                &[ethabi::Token::Int(a), ethabi::Token::Uint(U256::from(r))],
-            );
-
-            let res = bigint_to_eth(&big_a.clone().shr(r), width);
-
-            assert_eq!(shr, vec![ethabi::Token::Int(res)]);
-        }
-    }
-}
-
-fn truncate_int(n: &mut U256, width: usize) {
-    let sign = n.bitand(U256::from(1) << (width - 1)) != U256::zero();
-
-    let mut bits = 256 - width;
-
-    let mut offset = 3;
-
-    while bits > 64 {
-        n.0[offset] = if sign { u64::MAX } else { 0 };
-
-        offset -= 1;
-        bits -= 64;
-    }
-
-    if bits > 0 {
-        if sign {
-            n.0[offset] |= !((1 << (64 - bits)) - 1);
-        } else {
-            n.0[offset] &= (1 << (64 - bits)) - 1;
-        }
-    }
-}
-
-fn bigint_to_eth(v: &BigInt, width: usize) -> U256 {
-    let mut buf = v.to_signed_bytes_be();
-    let width = width / 8;
-
-    while buf.len() > width {
-        buf.remove(0);
-    }
-
-    let sign = if (buf[0] & 128) != 0 { 0xff } else { 0 };
-
-    while buf.len() < 32 {
-        buf.insert(0, sign);
-    }
-
-    U256::from_big_endian(&buf)
-}
-
-fn eth_to_bigint(v: &U256, width: usize) -> BigInt {
-    let mut buf = Vec::new();
-
-    buf.resize(32, 0);
-
-    v.to_big_endian(&mut buf);
-
-    let width = width / 8;
-
-    while buf.len() > width {
-        buf.remove(0);
-    }
-
-    BigInt::from_signed_bytes_be(&buf)
-}

+ 0 - 117
tests/ewasm_tests/yul.rs

@@ -1,117 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-
-use crate::build_solidity;
-use byte_slice_cast::AsByteSlice;
-use ethabi::{Token, Uint};
-
-#[test]
-fn eth_builtins() {
-    let mut runtime = build_solidity(
-        r#"
-contract testing  {
-    function test_address() public view returns (uint256 ret) {
-        assembly {
-            let a := address()
-            ret := a
-        }
-    }
-
-    function test_balance() public view returns (uint256 ret) {
-        assembly {
-            let a := address()
-            ret := balance(a)
-        }
-    }
-
-    function test_selfbalance() public view returns (uint256 ret) {
-        assembly {
-            let a := selfbalance()
-            ret := a
-        }
-    }
-
-    function test_caller() public view returns (uint256 ret) {
-        assembly {
-            let a := caller()
-            ret := a
-        }
-    }
-
-    function test_callvalue() public view returns (uint256 ret) {
-        assembly {
-            let a := callvalue()
-            ret := a
-        }
-    }
-
-    function test_extcodesize() public view returns (uint256 ret) {
-        assembly {
-            let a := address()
-            ret := extcodesize(a)
-        }
-    }
-}
-"#,
-    );
-
-    runtime.constructor(&[]);
-    let returns = runtime.function("test_address", &[]);
-    let addr = returns[0].clone().into_uint().unwrap().0;
-    let mut b_vec = addr.as_byte_slice().to_vec();
-    b_vec.reverse();
-    assert_eq!(&b_vec[12..32], runtime.vm.cur.as_ref());
-
-    let returns = runtime.function("test_balance", &[]);
-    assert_eq!(
-        returns,
-        vec![Token::Uint(Uint::from_big_endian(
-            runtime
-                .accounts
-                .get(runtime.vm.cur.as_ref())
-                .unwrap()
-                .1
-                .to_be_bytes()
-                .as_ref()
-        ))]
-    );
-
-    let returns = runtime.function("test_selfbalance", &[]);
-    assert_eq!(
-        returns,
-        vec![Token::Uint(Uint::from_big_endian(
-            runtime
-                .accounts
-                .get(runtime.vm.cur.as_ref())
-                .unwrap()
-                .1
-                .to_be_bytes()
-                .as_ref()
-        ))]
-    );
-
-    let returns = runtime.function("test_caller", &[]);
-    let addr = returns[0].clone().into_uint().unwrap().0;
-    let mut b_vec = addr.as_byte_slice().to_vec();
-    b_vec.reverse();
-    assert_eq!(&b_vec[12..32], runtime.caller.as_slice());
-
-    let returns = runtime.function("test_callvalue", &[]);
-    assert_eq!(
-        returns,
-        vec![Token::Uint(Uint::from_big_endian(
-            runtime.value.to_be_bytes().as_ref()
-        ))]
-    );
-
-    let returns = runtime.function("test_extcodesize", &[]);
-    assert_eq!(
-        returns,
-        vec![Token::Uint(Uint::from_big_endian(
-            runtime.accounts[&runtime.vm.cur]
-                .0
-                .len()
-                .to_be_bytes()
-                .as_ref()
-        ))]
-    );
-}

+ 119 - 27
tests/solana_tests/simple.rs

@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: Apache-2.0
 
 use crate::build_solidity;
-use ethabi::ethereum_types::U256;
+use ethabi::{ethereum_types::U256, Token};
 use solang::{file_resolver::FileResolver, Target};
 use std::ffi::OsStr;
 
@@ -73,10 +73,7 @@ fn parameters() {
 
     vm.function(
         "test",
-        &[
-            ethabi::Token::Uint(U256::from(10)),
-            ethabi::Token::Uint(U256::from(10)),
-        ],
+        &[Token::Uint(U256::from(10)), Token::Uint(U256::from(10))],
         &[],
         None,
     );
@@ -87,10 +84,7 @@ fn parameters() {
 
     vm.function(
         "test",
-        &[
-            ethabi::Token::Uint(U256::from(99)),
-            ethabi::Token::Uint(U256::from(102)),
-        ],
+        &[Token::Uint(U256::from(99)), Token::Uint(U256::from(102))],
         &[],
         None,
     );
@@ -111,9 +105,9 @@ fn returns() {
 
     vm.constructor("foo", &[]);
 
-    let returns = vm.function("test", &[ethabi::Token::Uint(U256::from(10))], &[], None);
+    let returns = vm.function("test", &[Token::Uint(U256::from(10))], &[], None);
 
-    assert_eq!(returns, vec![ethabi::Token::Uint(U256::from(100))]);
+    assert_eq!(returns, vec![Token::Uint(U256::from(100))]);
 
     let mut vm = build_solidity(
         r#"
@@ -126,18 +120,13 @@ fn returns() {
 
     vm.constructor("foo", &[]);
 
-    let returns = vm.function(
-        "test",
-        &[ethabi::Token::Uint(U256::from(982451653))],
-        &[],
-        None,
-    );
+    let returns = vm.function("test", &[Token::Uint(U256::from(982451653))], &[], None);
 
     assert_eq!(
         returns,
         vec![
-            ethabi::Token::Bool(true),
-            ethabi::Token::Uint(U256::from(961748941u64 * 982451653u64))
+            Token::Bool(true),
+            Token::Uint(U256::from(961748941u64 * 982451653u64))
         ]
     );
 }
@@ -168,7 +157,7 @@ fn flipper() {
         }"#,
     );
 
-    vm.constructor("flipper", &[ethabi::Token::Bool(true)]);
+    vm.constructor("flipper", &[Token::Bool(true)]);
 
     assert_eq!(
         vm.data()[0..17].to_vec(),
@@ -177,7 +166,7 @@ fn flipper() {
 
     let returns = vm.function("get", &[], &[], None);
 
-    assert_eq!(returns, vec![ethabi::Token::Bool(true)]);
+    assert_eq!(returns, vec![Token::Bool(true)]);
 
     vm.function("flip", &[], &[], None);
 
@@ -188,7 +177,7 @@ fn flipper() {
 
     let returns = vm.function("get", &[], &[], None);
 
-    assert_eq!(returns, vec![ethabi::Token::Bool(false)]);
+    assert_eq!(returns, vec![Token::Bool(false)]);
 }
 
 #[test]
@@ -222,17 +211,17 @@ fn incrementer() {
         }"#,
     );
 
-    vm.constructor("incrementer", &[ethabi::Token::Uint(U256::from(5))]);
+    vm.constructor("incrementer", &[Token::Uint(U256::from(5))]);
 
     let returns = vm.function("get", &[], &[], None);
 
-    assert_eq!(returns, vec![ethabi::Token::Uint(U256::from(5))]);
+    assert_eq!(returns, vec![Token::Uint(U256::from(5))]);
 
-    vm.function("inc", &[ethabi::Token::Uint(U256::from(7))], &[], None);
+    vm.function("inc", &[Token::Uint(U256::from(7))], &[], None);
 
     let returns = vm.function("get", &[], &[], None);
 
-    assert_eq!(returns, vec![ethabi::Token::Uint(U256::from(12))]);
+    assert_eq!(returns, vec![Token::Uint(U256::from(12))]);
 }
 
 #[test]
@@ -306,5 +295,108 @@ fn dead_storage_bug() {
 
     let returns = vm.function("v", &[], &[], None);
 
-    assert_eq!(returns, vec![ethabi::Token::Uint(U256::from(9991))]);
+    assert_eq!(returns, vec![Token::Uint(U256::from(9991))]);
+}
+
+#[test]
+fn simple_loops() {
+    let mut runtime = build_solidity(
+        r##"
+contract test3 {
+	function foo(uint32 a) public returns (uint32) {
+		uint32 b = 50 - a;
+		uint32 c;
+		c = 100 * b;
+		c += 5;
+		return a * 1000 + c;
+	}
+
+	function bar(uint32 b, bool x) public returns (uint32) {
+		uint32 i = 1;
+		if (x) {
+			do {
+				i += 10;
+			}
+			while (b-- > 0);
+		} else {
+			uint32 j;
+			for (j=2; j<10; j++) {
+				i *= 3;
+			}
+		}
+		return i;
+	}
+
+	function baz(uint32 x) public returns (uint32) {
+		for (uint32 i = 0; i<100; i++) {
+			x *= 7;
+
+			if (x > 200) {
+				break;
+			}
+
+			x++;
+		}
+
+		return x;
+	}
+}"##,
+    );
+
+    // call constructor
+    runtime.constructor("test3", &[]);
+
+    for i in 0..=50 {
+        let res = ((50 - i) * 100 + 5) + i * 1000;
+
+        let returns = runtime.function("foo", &[Token::Uint(U256::from(i))], &[], None);
+
+        assert_eq!(returns, vec![Token::Uint(U256::from(res))]);
+    }
+
+    for i in 0..=50 {
+        let res = (i + 1) * 10 + 1;
+
+        let returns = runtime.function(
+            "bar",
+            &[Token::Uint(U256::from(i)), Token::Bool(true)],
+            &[],
+            None,
+        );
+
+        assert_eq!(returns, vec![Token::Uint(U256::from(res))]);
+    }
+
+    for i in 0..=50 {
+        let mut res = 1;
+
+        for _ in 2..10 {
+            res *= 3;
+        }
+
+        let returns = runtime.function(
+            "bar",
+            &[Token::Uint(U256::from(i)), Token::Bool(false)],
+            &[],
+            None,
+        );
+
+        assert_eq!(returns, vec![Token::Uint(U256::from(res))]);
+    }
+
+    for i in 1..=50 {
+        let mut res = i;
+
+        for _ in 0..100 {
+            res *= 7;
+            if res > 200 {
+                break;
+            }
+            res += 1;
+        }
+
+        let returns = runtime.function("baz", &[Token::Uint(U256::from(i))], &[], None);
+
+        assert_eq!(returns, vec![Token::Uint(U256::from(res))]);
+    }
 }

+ 64 - 1
tests/solana_tests/yul.rs

@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: Apache-2.0
 
-use crate::build_solidity;
+use crate::{account_new, build_solidity};
+use byte_slice_cast::AsByteSlice;
 use ethabi::{ethereum_types::U256, FixedBytes, Token, Uint};
 
 #[test]
@@ -293,3 +294,65 @@ fn external_function() {
     let addr = returns[1].clone().into_fixed_bytes().unwrap();
     assert_eq!(addr[26], 90);
 }
+
+#[test]
+fn eth_builtins() {
+    let mut runtime = build_solidity(
+        r#"
+contract testing  {
+    function test_address() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := a
+        }
+    }
+
+    function test_balance() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := balance(a)
+        }
+    }
+
+    function test_selfbalance() public view returns (uint256 ret) {
+        assembly {
+            let a := selfbalance()
+            ret := a
+        }
+    }
+
+    function test_caller() public view returns (uint256 ret) {
+        assembly {
+            let a := caller()
+            ret := a
+        }
+    }
+}"#,
+    );
+
+    runtime.constructor("testing", &[]);
+    let returns = runtime.function("test_address", &[], &[], None);
+    let addr = returns[0].clone().into_uint().unwrap();
+    let mut b_vec = addr.as_byte_slice().to_vec();
+    b_vec.reverse();
+    assert_eq!(&b_vec, runtime.stack[0].data.as_ref());
+
+    runtime
+        .account_data
+        .get_mut(&runtime.stack[0].data)
+        .unwrap()
+        .lamports = 102;
+    let returns = runtime.function("test_balance", &[], &[], None);
+    assert_eq!(returns, vec![Token::Uint(U256::from(102))]);
+
+    let returns = runtime.function("test_selfbalance", &[], &[], None);
+    assert_eq!(returns, vec![Token::Uint(U256::from(102))]);
+
+    let sender = account_new();
+
+    let returns = runtime.function("test_caller", &[], &[], Some(&sender));
+    let addr = returns[0].clone().into_uint().unwrap().0;
+    let mut b_vec = addr.as_byte_slice().to_vec();
+    b_vec.reverse();
+    assert_eq!(b_vec, sender.to_vec());
+}

+ 84 - 0
tests/substrate_tests/yul.rs

@@ -108,3 +108,87 @@ contract testing  {
     runtime.function("storage_struct", Val256(U256::from(17)).encode());
     assert_eq!(runtime.vm.output, Val256(U256::from(24)).encode());
 }
+
+#[test]
+fn eth_builtins() {
+    let mut runtime = build_solidity(
+        r#"
+contract testing  {
+    function test_address() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := a
+        }
+    }
+
+    function test_balance() public view returns (uint256 ret) {
+        assembly {
+            let a := address()
+            ret := balance(a)
+        }
+    }
+
+    function test_selfbalance() public view returns (uint256 ret) {
+        assembly {
+            let a := selfbalance()
+            ret := a
+        }
+    }
+
+    function test_caller() public view returns (uint256 ret) {
+        assembly {
+            let a := caller()
+            ret := a
+        }
+    }
+
+    function test_callvalue() public payable returns (uint256 ret) {
+        assembly {
+            let a := callvalue()
+            ret := a
+        }
+    }
+}"#,
+    );
+
+    runtime.constructor(0, Vec::new());
+    runtime.function("test_address", Vec::new());
+    let mut b_vec = runtime.vm.output.to_vec();
+    b_vec.reverse();
+    assert_eq!(b_vec, runtime.vm.account.to_vec());
+
+    runtime.function("test_balance", Vec::new());
+    assert_eq!(
+        runtime.vm.output[..16].to_vec(),
+        runtime
+            .accounts
+            .get_mut(&runtime.vm.account)
+            .unwrap()
+            .1
+            .encode(),
+    );
+
+    runtime.function("test_selfbalance", Vec::new());
+    assert_eq!(
+        runtime.vm.output[..16].to_vec(),
+        runtime
+            .accounts
+            .get_mut(&runtime.vm.account)
+            .unwrap()
+            .1
+            .encode(),
+    );
+
+    runtime.function("test_caller", Vec::new());
+    let mut b_vec = runtime.vm.output.to_vec();
+    b_vec.reverse();
+    assert_eq!(b_vec, runtime.vm.caller.to_vec());
+
+    runtime.vm.value = 0xdeadcafeu128;
+    runtime.function("test_callvalue", Vec::new());
+
+    let mut expected = 0xdeadcafeu32.to_le_bytes().to_vec();
+    expected.resize(32, 0);
+
+    assert_eq!(runtime.vm.output, expected);
+}

+ 1 - 1
tests/undefined_variable_detection.rs

@@ -10,7 +10,7 @@ use std::ffi::OsStr;
 fn parse_and_codegen(src: &'static str) -> Namespace {
     let mut cache = FileResolver::new();
     cache.set_file_contents("test.sol", src.to_string());
-    let mut ns = parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Ewasm);
+    let mut ns = parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::EVM);
     let opt = Options {
         dead_storage: false,
         constant_folding: false,

+ 2 - 2
tests/unused_variable_detection.rs

@@ -9,7 +9,7 @@ fn parse(src: &'static str) -> ast::Namespace {
     let mut cache = FileResolver::new();
     cache.set_file_contents("test.sol", src.to_string());
 
-    parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Ewasm)
+    parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::EVM)
 }
 
 fn parse_two_files(src1: &'static str, src2: &'static str) -> ast::Namespace {
@@ -17,7 +17,7 @@ fn parse_two_files(src1: &'static str, src2: &'static str) -> ast::Namespace {
     cache.set_file_contents("test.sol", src1.to_string());
     cache.set_file_contents("test2.sol", src2.to_string());
 
-    parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::Ewasm)
+    parse_and_resolve(OsStr::new("test.sol"), &mut cache, Target::EVM)
 }
 
 #[test]

+ 1 - 1
vscode/README.md

@@ -4,7 +4,7 @@ The Solang Solidity Compiler compiles Solidity for the following blockchains:
 
 - Parity Substrate
 - Solana
-- ewasm
+- evm (enough for the extension)
 
 This extension provides syntax highlighting, diagnostics  (i.e. compiler warnings and errors), and information on types and functions when hovering.
 

+ 1 - 1
vscode/package.json

@@ -27,7 +27,7 @@
 					"enum": [
 						"solana",
 						"substrate",
-						"ewasm"
+						"evm"
 					],
 					"default": "solana",
 					"description": "Chain to build for. The Solidity language changes in subtle ways depending on the target."